sql >> Databasteknik >  >> RDS >> Mysql

Använda förberedda uttalanden med mysql i python

Att använda förberedda satser med MySQL i Python förklaras t.ex. på http://zetcode.com/db/mysqlpython/ -- titta på den sidan efter Prepared statements .

I ditt fall skulle det vara t.ex.:

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

och senare, "in the loop" som du uttryckte det:

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

utan ytterligare strängformatering -- MySQLdb modulen förbereder och kör delar för din räkning (och kan cache saker för att undvika att arbetet upprepas i onödan, etc, etc).

Tänk på, beroende på typen av "slingan" du nämner, att det är möjligt att ett enda anrop till .execute_many (med en sekvens av tupler som det andra argumentet) kan ta platsen för hela slingan (såvida du inte behöver mer bearbetning inom den slingan utöver att bara infoga data i DB).

Tillagt:ett bättre alternativ nuförtiden kan vara att använda mysqls egen Connector/Python och den explicita prepare=True alternativet i .cursor() fabrik -- se http://dev .mysql.com/doc/connector-python/en/connector-python-api-mysqlcursorprepared.html . Detta låter dig ha en specifik markör på vilken satser är förberedda (med det "effektivare än att använda PREPARE och EXECUTE" binära protokollet, enligt den mysql.com-sidan) och en annan för satser som inte är bättre förberedda; "explicit är bättre än implicit" är trots allt en av principerna i "The Zen of Python" (import this från en interaktiv uppmaning att läsa alla dessa principer). mysqldb att göra saker implicit (och det verkar som den nuvarande versionen med öppen källkod inte gör det använd förberedda satser) kan inte vara en lika bra arkitektur som Connector/Python är mer explicit.



  1. När och varför ska man använda mysqli_fetch_row, mysqli_fetch_object, mysqli_fetch_assoc, mysqli_fetch_array

  2. Återställer exempel på DW Database AdventureWorksDW2019

  3. Vad är Oracle Joins (Sql Joins)?

  4. Säkra fjärranslutning för mysql