Python: ошибка в MySQL - PullRequest
       3

Python: ошибка в MySQL

0 голосов
/ 25 июля 2010
import MySQLdb    
import random

db = MySQLdb.connect (host = "localhost", user = "python-test", passwd = "python", db = "python-test")

cursor = db.cursor()

var = .3

sql = "INSERT INTO RandomInt 
         (RAND) 
       VALUES 
         (var)" # RandomInt is the name of the table and Rand is the Column Name

cursor.execute(sql)

db.commit()
db.close()

Я получаю сообщение об ошибке Operational Error: (1054, "Unknown column 'var' in 'field list'") Почему я получаю эту ошибку и как ее исправить, хотя я уже определил var?

Ответы [ 4 ]

5 голосов
/ 25 июля 2010

Как написано, var отправляется в MySQL в виде строки.
Попробуйте вместо этого:

sql = "INSERT INTO RandomInt (RAND) VALUES (%s)"
cursor.execute(sql, (var,))

Edit:

>>> import MySQLdb
>>> MySQLdb.paramstyle
'format'

Параметр MySQLdb равен format; который согласно DB-API равен %s:

            'format'        ANSI C printf format codes, 
                            e.g. '...WHERE name=%s'
1 голос
/ 25 июля 2010
var = .3
sql = "INSERT INTO RandomInt (RAND) VALUES (%s)" 
cursor.execute(sql, (var,))
1 голос
/ 25 июля 2010

Это исправит одну проблему:

sql = "INSERT INTO RandomInt (RAND) VALUES (%s)" 
cursors.execute(sql, (var,))

Остается только имя таблицы, в которую вы пишете, 0.3 не является целым числом.

Редактировать: paramstyle mysqldb это %s не ?.

0 голосов
/ 25 июля 2010

Ваш sql отображается в MySQL как:

INSERT INTO RandomInt (RAND) VALUES (var)

Чтобы на самом деле заменить строку var, попробуйте следующее:

sql = "INSERT INTO RandomInt (RAND) VALUES (%d)"  % (var,)

Теперь MySQL должен видеть:

INSERT INTO RandomInt (RAND) VALUES (0.3)

ПРИМЕЧАНИЕ: Адам Бернье прав насчет инъекции sql. См. cursor.execute документ для замены параметров, а также его ответ.

...