首页 > 解决方案 > sqlite3.OperationalError:靠近“........”:语法错误

问题描述

Windows 7的

蟒蛇2.7

姜戈 1.11

我使用 Django 开发了一个网站。在后端,我有一个有 2 个表的 sqlite 数据库。一个表格接受用户提交的表单,另一个用于比较。用户提交表单A后,将保存在表catalog_fw下,并将catalog_fw.ODM和catalog_fw.project_name与表catalog_fw_instance中的进行比较。如果某行catalog_fw.ODM 和catalog_fw.project 的内容完全相同,catalog_fw_instance.level 将与A 结合传递给一个.exe 以生成一个txtx 文件。

但是,这行出现错误:c.execute("catalog_fw_instance.level,...... `当我运行这个python文件时:</p>

sqlite3.OperationalError: near "catalog_fw_instance": syntax error

获取 sqlite 数据、比较并传递给 .exe 的代码在这里:

def when_call_exe():
with sqlite3.connect('db.sqlite3') as con:
    c = con.cursor()

    #c.execute("catalog_fw_instance.level, SELECT catalog_fw.ODM_name, catalog_fw.project_name, catalog_fw.UAP, catalog_fw.NAP, catalog_fw.LAP, catalog_fw.num_address FROM catalog_fw INNER JOIN catalog_fw_instance ON catalog_fw.ODM_name=catalog_fw_instance.ODM_name AND catalog_fw.project_name=catalog_fw_instance.project_name")
    sql = ("SELECT catalog_fw.ODM_name, catalog_fw.project_name, catalog_fw.UAP, catalog_fw.NAP, catalog_fw.LAP, " +
           "catalog_fw.num_address, catalog_fw_instance.level " +
           "FROM catalog_fw catalog_fw" +
           "INNER JOIN catalog_fw_instance catalog_fw_instanc" +
           "    ON catalog_fw.ODM_name = catalog_fwi.ODM_name AND catalog_fw.project_name = catalog_fw_instance.project_name")
    c.execute(sql)



    print '1:', c.fetchone()
    parameter = c.fetchone()
    print '2', parameter

    #pass to exe
    args = ['.//exe//Test.exe', parameter[0], parameter[1]+parameter[2], parameter[3], parameter[4], parameter[5], parameter[6]]

    output = my_check_output(args)
    if 'SUCCESS' in output:
        filename = output[28:-1]

    else:
        filename = output[8:-1]

    downloadlink = os.path.join('/exe', '%s' % filename)


    #save link to sqlite db

    c.execute('''UPDATE catalog_fw SET download = %s  WHERE 
ODM_Name=parameter[1] AND project_Name=parameter[2] ''' % downloadlink)

这里显示了 sqlite 数据库中的 2 个表

表 1 表 2

标签: pythondjangosqlite

解决方案


据我所知,cursor#execute()在 Python 中调用时,我们应该传递一个包含要运行的查询的字符串。看起来您正在传递一个选择参数,然后是一个查询,所有这些都作为一个字符串。考虑以下版本:

c = con.cursor()

sql = ("SELECT cf.ODM_name, cf.project_name, cf.UAP, cf.NAP, cf.LAP, " +
       "cf.num_address, cfi.level " +
       "FROM catalog_fw cf " +
       "INNER JOIN catalog_fw_instance cfi " +
       "    ON cf.ODM_name = cfi.ODM_name AND cf.project_name = cfi.project_name")
c.execute(sql)

print(c.fetchone())
parameter = c.fetchone()

推荐阅读