【问题标题】:Mysqldb INSERT INTO syntax error in PythonPython中的Mysqldb INSERT INTO语法错误
【发布时间】:2012-05-07 14:53:47
【问题描述】:

我有一个 excel 文件,我正在尝试将其放入 mysql。我想使用 python 插件 xlrd 提取 32 个字段并放入 mysql。数据布局如下:

我的方法是遍历行和列,边走边添加字段名。该代码添加了字段名称,但添加数据时出现错误。 (我创建了表 'OilProvedReservesHistory',索引为唯一字段):

def get_data_from_sheet(sheet_index, table, start_row, end_row, end_col):

for row in range(start_row - 1, end_row - 1):
    for col in range(end_col):
        cell = sheet.cell(row,col)
        if col == 0:        
            fieldname = cleanup_field(cell.value)
            if fieldname != ("Blank Cell"):
                sql = "ALTER TABLE OilProvedReservesHistory ADD %s VARCHAR(20)" % fieldname
                c.execute(sql)                  
        else:
            data = cleanup_data(cell)
            if data != ("Blank Cell"):
                postToMySQL(data,fieldname,table)


def postToMySQL(data,fieldname,table):
#Generate sql query string                
sql = "INSERT INTO " + table + " ("+ fieldname + ") VALUES %s"
c.execute(sql, data)
# Executes: ("""INSERT INTO OilProvedReservesHistory (US) VALUES 36.533""")

table = create_table_from_sheet_name()

sheet_index = 0
start_row = 5
end_row = 68
end_col = 32

get_data_from_sheet(sheet_index, table, start_row, end_row, end_col)

我得到的错误是:

_mysql_exceptions.ProgrammingError: (1064, "您的 SQL 语法有错误;请查看与您的 MySQL 服务器版本相对应的手册,以在第 1 行的 ''36.533'' 附近使用正确的语法")

你能帮我解决这个问题吗?非常感谢!

【问题讨论】:

    标签: python sql syntax-error mysql-python


    【解决方案1】:

    我的猜测是您只是忘记了 VALUES 子句的括号。

    INSERT INTO OilProvedReservesHistory (US) VALUES (36.533)
    

    尝试将您的代码更改为:

    sql = "INSERT INTO " + table + " ("+ fieldname + ") VALUES (%s)"
    

    【讨论】:

    • 哈,你说得对!在发布此内容之前,我一直在尝试先创建所有字段名,然后发布数据值,但是我认为错误是我试图只用一个值填充一行。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多