sql >> Database teknologi >  >> RDS >> Mysql

Brug af forberedte udsagn med mysql i python

Brug af forberedte udsagn med MySQL i Python er forklaret f.eks. på http://zetcode.com/db/mysqlpython/ -- kig på den side efter Prepared statements .

I dit tilfælde ville det f.eks. være:

sql = ('INSERT INTO {} (date, time, tag, power) VALUES '
       '(%s, %s, %s, %s)'.format(self.db_scan_table))

og senere "in the loop", som du siger det:

self.cursor.execute(sql, (d, t, tag, power))

uden yderligere strengformatering -- MySQLdb modulet forbereder og udfører dele på dine vegne (og kan cache ting for at undgå at gentage arbejde unødvendigt osv. osv.).

Overvej, afhængigt af arten af ​​"sløjfen", du nævner, at det er muligt, at et enkelt kald til .execute_many (med en sekvens af tupler som det andet argument) kunne træde i stedet for hele løkken (medmindre du har brug for mere behandling i den løkke ud over blot indsættelse af data i DB).

Tilføjet:et bedre alternativ i dag kan være at bruge mysqls egen Connector/Python og den eksplicitte prepare=True mulighed i .cursor() fabrik -- se http://dev .mysql.com/doc/connector-python/en/connector-python-api-mysqlcursorprepared.html . Dette giver dig mulighed for at have en specifik markør, som sætninger er forberedt på (med den "mere effektiv end at bruge PREPARE and EXECUTE" binære protokol, ifølge den mysql.com-side) og en anden for sætninger, der bedre ikke er forberedt; "eksplicit er bedre end implicit" er trods alt et af principperne i "The Zen of Python" (import this fra en interaktiv opfordring til at læse alle disse principper). mysqldb gør ting implicit (og det ser ud til, at den nuværende open source-version ikke gør det). brug forberedte udsagn) kan ikke være så god en arkitektur som Connector/Python er mere eksplicit.



  1. Sådan bruges SQL Server AlwaysOn-funktioner

  2. Er der en kombination af LIKE og IN i SQL?

  3. Mysql Sådan vælger du kun fra en kolonne, hvis kolonnen eksisterer

  4. MySql C++ connector getString() virker ikke korrekt, mens getInt fungerer perfekt