try异常中的python到mysql未知列

try异常中的python到mysql未知列,python,mysql,Python,Mysql,我只想使用Python3.2和mysql.connector选择或插入mysql import mysql.connector filename = "t1.15231.0337.mod35.hdf" try: cnx = mysql.connector.connect(user='root', password='', database='etl') cursor = cnx.cursor() cursor.execute('SELECT * FROM hdf_file WHERE NAMA_

我只想使用Python3.2和mysql.connector选择或插入mysql

import mysql.connector
filename = "t1.15231.0337.mod35.hdf"
try:
cnx = mysql.connector.connect(user='root', password='', database='etl')
cursor = cnx.cursor()
cursor.execute('SELECT * FROM hdf_file WHERE NAMA_FILE = %s',filename)
rows = cursor.fetchall ()
if rows == []:
    insert_hdf = cursor.execute('INSERT INTO hdf_file VALUES(%s,null,NOW(),null,null,NOW())',filename)
    cursor.execute(insert_hdf)
    cnx.commit()
    cursor.close()
    cnx.close()
除了mysql.connector.Error作为错误外: 打印出错:{}.formaterr

但它说:where子句中的未知列'filename' 我试着这样说:

cursor.execute('SELECT * FROM hdf_file WHERE NAMA_FILE = filename')
cursor.execute('SELECT * FROM hdf_file WHERE NAMA_FILE = %s', (filename,))
但是我得到了相同的错误…

当使用参数化查询时,查询参数作为序列传递,例如列表、元组或字典(如果使用命名参数)。您的代码只传递字符串文件名

您的查询可以这样写:

cursor.execute('SELECT * FROM hdf_file WHERE NAMA_FILE = filename')
cursor.execute('SELECT * FROM hdf_file WHERE NAMA_FILE = %s', (filename,))
在这里,元组文件名被传递给execute。类似地,对于插入查询:

cursor.execute('INSERT INTO hdf_file VALUES (%s, null, NOW(), null, null, NOW())',
                   (filename,))
execute将返回None,因此将结果存储在insert_hdf变量中没有任何用处。如果您尝试使用游标,它也没有任何意义,并且会导致错误。executeinsert\u hdf。

尝试将其像此游标一样放置。执行'SELECT*FROM hdf\u file WHERE NAMA\u file=%s',filename,