Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/355.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用python从sqlite中的第二个数据库获取表名_Python_Sqlite - Fatal编程技术网

使用python从sqlite中的第二个数据库获取表名

使用python从sqlite中的第二个数据库获取表名,python,sqlite,Python,Sqlite,我正在尝试使用python获取两个数据库的表名。我从第一个数据库获取表,但不是从第二个数据库获取表。每个数据库中只有一个表 代码- import sqlite3 db1 = r"C:\Users\X\Documents\sqlitedb\A.db" db2 = r"C:\Users\X\Documents\sqlitedb\B.db" conn = sqlite3.connect(db1) conn.execute("ATTACH '{}' AS db2".format(db2)) re

我正在尝试使用python获取两个数据库的表名。我从第一个数据库获取表,但不是从第二个数据库获取表。每个数据库中只有一个表

代码-

import sqlite3

db1 = r"C:\Users\X\Documents\sqlitedb\A.db"
db2 = r"C:\Users\X\Documents\sqlitedb\B.db"


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

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


res1 = conn.execute("""SELECT * FROM main."""+tblname+"""
                       WHERE IDKey NOT IN
                         (SELECT IDKey FROM db2."""+tblname+""")
                    """).fetchall()
res2 = conn.execute("""SELECT * FROM db2."""+tblname+"""
                       WHERE IDKey NOT IN
                         (SELECT IDKey FROM main."""+tblname+""")
                    """).fetchall()
它从db1而不是db2打印表


非常感谢您的帮助。

您应该重复查询第二个数据库:

res2 = conn.execute("SELECT name FROM db2.sqlite_master WHERE type='table'")
for name in res2:
    tblname = name[0]
    print(name[0])
或者两者结合:

res = conn.execute("""
SELECT name from sqlite_master WHERE type='table'
UNION 
SELECT name FROM db2.sqlite_master WHERE type='table' 
""")

(请注意,如果两个数据库中的tablename不同,则需要修复以下代码,因为
tblname
是在循环中定义的,它只记住最后一个值)

您应该对第二个数据库重复查询:

res2 = conn.execute("SELECT name FROM db2.sqlite_master WHERE type='table'")
for name in res2:
    tblname = name[0]
    print(name[0])
或者两者结合:

res = conn.execute("""
SELECT name from sqlite_master WHERE type='table'
UNION 
SELECT name FROM db2.sqlite_master WHERE type='table' 
""")

(请注意,如果两个数据库中的tablename不同,则需要修复以下代码,因为
tblname
是在循环中定义的,它只记住最后一个值)

非常感谢。成功了。我可能需要改变一下。非常感谢。成功了。我可能需要改变一下。