0
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

4 回答 4

5

正如所写,var正在作为字符串发送到 MySQL。
试一试:

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

编辑:

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

MySQLdb 的 paramstyle 是format; 其中,根据DB-API%s

            'format'        ANSI C printf format codes, 
                            e.g. '...WHERE name=%s'
于 2010-07-24T22:40:42.573 回答
1

这将解决一个问题:

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

剩下的是您写入的表的名称,0.3 不是 int。

编辑:mysqldb 的 paramstyle%s不是?.

于 2010-07-24T22:41:07.960 回答
1
var = .3
sql = "INSERT INTO RandomInt (RAND) VALUES (%s)" 
cursor.execute(sql, (var,))
于 2010-07-24T22:43:12.167 回答
0

您的 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)

注意:Adam Bernier 关于 sql 注入是正确的。有关参数替换及其答案,请参见cursor.execute文档。

于 2010-07-24T22:40:35.200 回答