PYTHON INSERT MYSql запрос - PullRequest
       8

PYTHON INSERT MYSql запрос

0 голосов
/ 10 июня 2018

Я пытаюсь выполнить этот код в python 2.7:

import MySQLdb, getopt
import MySQLdb.cursors
a = "TEST"
b = 1
c = 2
d = 3
e = 4
db = MySQLdb.connect(host="localhost", user="root",passwd="password", 
db="database") # name of the data base
cur = db.cursor(MySQLdb.cursors.DictCursor)
query = ""INSERT INTO `HD_coords` (`name`, `west`, `north`, `east`, `south`) 
VALUES (%s, %s, %s, %s, %s)"",(a, b, c, d, e)
cur.execute(query)
cur.close() 
db.commit() 

Итак, я получаю эту ошибку:

Traceback (most recent call last):
  File "MYSQL_TEST.py", line 15, in <module>
    cur.execute(query)
  File "/usr/lib/python2.7/dist-packages/MySQLdb/cursors.py", line 223, in 
execute
    self.errorhandler(self, TypeError, m)
  File "/usr/lib/python2.7/dist-packages/MySQLdb/connections.py", line 36, in 
defaulterrorhandler
    raise errorvalue
TypeError: query() argument 1 must be string or read-only buffer, not tuple

nom это тип varchar (255).запад, север, юг, восток - тип int.Любая подсказка?

Thxx

Ответы [ 3 ]

0 голосов
/ 10 июня 2018

Ваш синтаксис выключен.Код, выполняющий вставку, должен выглядеть примерно так:

cur = db.cursor(MySQLdb.cursors.DictCursor)
query = ("INSERT INTO HD_coords (name, west, north, east, south) " +
         "VALUES (%s, %s, %s, %s, %s)")
cur.execute(query, (a, b, c, d, e))
cur.close() 
db.commit()

Сначала определите оператор SQL с заполнителями, что вы, похоже, уже делаете.Затем привяжите значения к этим заполнителям в вашем вызове к cursor.execute.

0 голосов
/ 11 июня 2018

Вы можете использовать .format (** locals ()), который заменяет переменную их значениями:

cur = db.cursor(MySQLdb.cursors.DictCursor)
query = "INSERT INTO HD_coords (name, west, north, east, south) VALUES ({a},{b}, {c}, {d}, {e})".format(**locals())
cur.execute(query)
cur.close() 
db.commit()
0 голосов
/ 10 июня 2018

Вы должны поместить свой объект подключения в блок try-and Ожидайте, который может обработать исключение ваших подключений

Эта ошибка произошла, потому что она дает исключение перед исключением

...