Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Korzystanie z przygotowanych instrukcji za pomocą mysql w pythonie

Używanie przygotowanych instrukcji z MySQL w Pythonie jest wyjaśnione np. na http://zetcode.com/db/mysqlpython/ -- poszukaj na tej stronie Prepared statements .

W Twoim przypadku byłoby to np.:

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

a później „w pętli”, jak to ująłeś:

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

bez dalszego formatowania ciągów -- MySQLdb moduł przygotowuje i wykonuje części w Twoim imieniu (i może buforować rzeczy, aby uniknąć niepotrzebnego powtarzania pracy itp.).

Należy wziąć pod uwagę, w zależności od charakteru „pętli”, o której wspomniałeś, że możliwe jest, że pojedyncze wywołanie .execute_many (z sekwencją krotek jako drugim argumentem) może zająć miejsce całej pętli (chyba że potrzebujesz więcej przetwarzania w tej pętli poza samym wstawianiem danych do bazy danych).

Dodano:obecnie lepszą alternatywą może być użycie własnego Connector/Python mysql i jawne prepare=True opcja w .cursor() fabryka -- patrz http://dev .mysql.com/doc/connector-python/pl/connector-python-api-mysqlcursorprepared.html . Dzięki temu masz określony kursor, na którym przygotowywane są instrukcje (z protokołem binarnym "bardziej wydajnym niż używanie PREPARE i EXECUTE", zgodnie z tą stroną mysql.com) i drugi dla instrukcji, które lepiej nie są przygotowane; „wyraźne jest lepsze niż niejawne” jest w końcu jedna z zasad zawartych w „Zen Pythona” (import this z interaktywnej zachęty do przeczytania wszystkich tych zasad). mysqldb robienie rzeczy niejawnie (i wygląda na to, że obecna wersja open-source nie) użyj przygotowanych instrukcji) nie może być tak dobrą architekturą jak Connector/Python jest bardziej jednoznaczny.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak utworzyć indeks DESC w MySQL?

  2. Wysokie użycie procesora przez MySQL

  3. Przechowywanie UUID jako ciągu znaków w mysql przy użyciu JPA

  4. Data w adresie URL dd/mm/rrrr

  5. Zmiana z mysql na błąd kodu mysqli