繁体   English   中英

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

[英]Unable to use QtSqlDriver to retrieve data from a table with “.” in column names

我正在尝试使用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:Error near "SET": syntax error Unable to execute statement
ERROR:root:Error SELECT * FROM MyTable

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM