我在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()
非常感谢任何帮助。
答案 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:
有效。非常感谢。
我回答这个问题,以便其他具有相同问题的用户可以轻松确定所提供的答案。