Mysql
 sql >> база данни >  >> RDS >> Mysql

Използване на подготвени оператори с mysql в python

Използването на подготвени оператори с MySQL в Python е обяснено напр. в http://zetcode.com/db/mysqlpython/ -- потърсете в тази страница за Prepared statements .

Във вашия случай това би било, напр.:

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

и по-късно, "в цикъл", както се изразихте:

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

без допълнително форматиране на низ -- MySQLdb модулът подготвя и изпълнява части от ваше име (и може да кешира неща, за да избегне ненужно повтаряне на работа и т.н. и т.н.).

Помислете, в зависимост от естеството на "цикла", който споменавате, че е възможно едно извикване на .execute_many (с поредица от кортежи като втори аргумент) може да заеме мястото на целия цикъл (освен ако не се нуждаете от повече обработка в рамките на този цикъл освен само вмъкването на данни в DB).

Добавено:по-добра алтернатива в днешно време може да бъде използването на собствения Connector/Python на mysql и изричното prepare=True опция в .cursor() factory -- вижте http://dev .mysql.com/doc/connector-python/en/connector-python-api-mysqlcursorprepared.html . Това ви позволява да имате специфичен курсор, върху който се подготвят изрази (с двоичния протокол "по-ефективен от използването на PREPARE и EXECUTE", според тази страница на mysql.com) и друг за изрази, които са по-добре да не се подготвят; "изричното е по-добре от неявното" е в крайна сметка един от принципите в "Дзен на Python" (import this от интерактивна подкана за четене на всички тези принципи). mysqldb прави неща имплицитно (и изглежда, че текущата версия с отворен код не използвайте подготвени изрази) не може да бъде толкова добра архитектура като Connector/Python е по-изрично.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Отпечатване на таблица хоризонтална вместо вертикална с помощта на PHP

  2. Как да предадете изрази за условия към mySql заявка

  3. MySQL DELETE FROM с подзаявка UNION по условие IN

  4. Как да промените размера на max_allowed_packet

  5. Дублирана колона при присъединяване