使用python在sqlite中的数据库错误

时间:2017-10-24 08:32:05

标签: python sqlite

我在sqlite db中遇到错误。该脚本在windows中运行良好,但在linux中运行不正确。

我试图从两个数据库中获取表名(每个表中只有一个表)并对这些表进行选择查询。

代码 -

db1 = r"C:\Users\X\Documents\sqlitedb\8007.db"
db2 = r"C:\Users\X\Documents\sqlitedb\8008.db"

conn = sqlite3.connect(db1)
conn2 = sqlite3.connect(db2)
conn.execute("ATTACH '{}' AS db2".format(db2))

res = conn.execute("SELECT name FROM sqlite_master WHERE type='table';")
for name in res:
    tblname1 = name[0]
    #print(tblname1)

res2 = conn2.execute("SELECT name FROM sqlite_master WHERE type='table';")
for name in res2:
    tblname2 = name[0]
    #print(tblname2)

res1 = conn.execute("""SELECT * FROM main."""+tblname1+"""
                   WHERE IDKey NOT IN
                     (SELECT IDKey FROM db2."""+tblname2+""")
                """).fetchall()
res2 = conn.execute("""SELECT * FROM db2."""+tblname2+"""
                   WHERE IDKey NOT IN
                     (SELECT IDKey FROM main."""+tblname1+""")
                """).fetchall()

错误是 -

select_mismatched_files """).fetchall() sqlite3.OperationalError: near "SELECT": syntax error

错误在这一行 -

res2 = conn.execute("""SELECT * FROM db2."""+tblname2+"""
                   WHERE IDKey NOT IN
                     (SELECT IDKey FROM main."""+tblname1+""")
                """).fetchall()

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

评论中的抄本(更正):

chade_(我):

  

没有。让我试试。

Prithviraj Mitra:

  

如果我使用单引号,我的编辑器中会出现红色标记。可能这条线不正确:

res2 = conn.execute('SELECT * FROM db2.'+tblname2+' WHERE IDKey NOT IN(SELECT IDKey FROM main.'+tblname1)).fetchall()

沙德_:

  

我认为这一行应该是这样的(关闭)括号并未包含在'中):

res2 = conn.execute('SELECT * FROM db2.'+tblname2+' WHERE IDKey NOT IN(SELECT IDKey FROM main.'+tblname1+')').fetchall()

Prithviraj Mitra:

  

有效。非常感谢。

我回答这个问题,以便其他具有相同问题的用户可以轻松确定所提供的答案。