gpt4 book ai didi

sqlite - 无法使用QtSqlDriver从带有“。”的表中检索数据在列名中

转载 作者:行者123 更新时间:2023-12-03 19:50:33 26 4
gpt4 key购买 nike

我正在尝试使用QtSql.QSqlTableModel读取SQlite数据库。问题是它不会读取字段名称包含“。”的任何表。通过setTable方法。

例如,如果我有一个名为MyTable的表,且其列名
(ID,Name.First,Name.Last)
我可以通过查询手动选择它

SELECT * FROM MyTable


要么

SELECT "ID", "Name.First", "Name.Last" and all is ok


但是,QSqlTableModel将不使用该查询,但会出现“没有这样的列Name.First无法执行语句”错误。

当我更深入地挖掘时,Qt中的SQLITE驱动程序会将查询重写为

SELECT "ID", "Name"."First", "Name"."Last" FROM MyTable


但是此SELECT语句是错误的,它将尝试从另一个表“名称”中获取列,但是我想要表“ MyTable”中的列“ Name.First”

我试图通过子类化setTable方法来规避此问题,该方法可将数据获取到TableView中:

def tableName(self):
return self._tableName

def setTable(self, tableName):
self.clear()
self._tableName = tableName
self.setQuery(QtSql.QSqlQuery("SELECT * FROM {0}".format(tableName), self.database()))


但是,以这种方式重新实现该方法会破坏方法 submitAll()

在“文件保存”方法中,我具有以下内容:

ok = self.tableModel.submitAll()
if not ok:
logging.error('Error %s' % self.tableModel.lastError().text())
logging.error('Error %s' % self.tableModel.query().lastQuery())
return False


这给出了这个日志:

ERROR:root:靠近“ SET”的错误:语法错误无法执行语句
ERROR:root:Error SELECT * FROM MyTable


但是,当我不重新实现 setTable方法时, submitAll()可以正常工作。

所以...我该如何规避“。”在列名称问题,也有submitAll()工作?

顺便说一句:我同意拥有“。”在SQL表的字段名中输入一个好主意不是一个好主意,但这是与另一个工具结合使用的,该工具以这种方式生成sqlite文件,而我对此无法控制。

最佳答案

关于sqlite - 无法使用QtSqlDriver从带有“。”的表中检索数据在列名中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16682409/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com