我在一次非常罕见的失败中挣扎。我运行了一个程序,将配置数据库连接到生产数据库。我使用了来自sqlite的ATTACH DATABASE
命令。它工作得很好,我对这个解决方案感到高兴。从一次运行到另一次运行,它停止连接。如果我在Sqlviewer的环境中使用,我可以打开第一个DB并运行类似ATTACH DATABASE 'c:\DATEN\temp\clcconfig.db' as 'configdb'
的SQL语句,然后我可以看到所有表。
封闭的snipped包含我在运行时使用的命令。我在Windows101909下使用PyQt5.15.1和Python3.7
我不知道这怎么会发生。任何人都可以使用任何数据库测试附带的代码
from PyQt5.QtSql import QSqlDatabase, QSqlQuery
import os
maindb = 'C:/DATEN/temp/Test20.db'
confdb = 'c:/DATEN/temp/clcconfig.db'
if os.path.exists(maindb):
print("maindb exists")
if os.path.exists(confdb):
print("confdb exists")
db = QSqlDatabase.addDatabase ("QSQLITE")
db.setDatabaseName (maindb)
if db.open ():
print ("Main DB open")
print ("DB driver :", db.drivers ())
print ("DB Names :", db.databaseName ())
print ("db Connections:", db.connectionNames ())
print ("db Tables :", db.tables ())
sql = "ATTACH DATABASE '%s' AS %s"%(confdb,'configdb')
qry = QSqlQuery (db)
qry.exec_ (sql)
print ("sqlexec fault:", qry.lastError ().text ())
print ("DB Names :", db.databaseName ())
print ("db Connections:", db.connectionNames ())
print ("db Tables :", db.tables ())
print ("DB Error :", db.lastError ().databaseText ())
print ("driver Error :", db.lastError ().driverText ())
tables()方法仅返回主数据库的
sqlite_master
的表,因此无法获取附加表的名称。如果要从连接的数据库获取表,则必须使用SQL查询:相关问题 更多 >
编程相关推荐