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()

既に var を定義しているのに、Operational Error: (1054, "Unknown column 'var' in 'field list'")なぜこのエラーが発生するのですか? また、これを修正するにはどうすればよいですか? というエラーが表示されます。

4

4 に答える 4

5

書かれvarているように、文字列として MySQL に送信されています。
代わりにこれを試してください:

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

編集:

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

MySQLdb の paramstyle は次のとおりですformatDB-APIによると、これは次の%sとおりです。

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

これにより、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)

実際に文字列を変数に置き換えるには、これを試してください:

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 に答える