sqlite - Unable to use QtSqlDriver to retrieve data from a table with "." in column names -
i have sqlite database i'm trying read qtsql.qsqltablemodel. issue won't read table field name contains "." via settable method.
as example if have table called mytable column names (id, name.first, name.last) can manually select query
select * mytable or
select "id", "name.first", "name.last" , ok however, qsqltablemodel won't use query error out "no such column name.first unable execute statement."
when dug little deeper sqlite driver in qt rewrite query
select "id", "name"."first", "name"."last" mytable but select statement wrong , try , grab columns table "name" want column called "name.first" in table "mytable"
i tried circumvent subclassing settable method worked getting data tableview:
def tablename(self): return self._tablename def settable(self, tablename): self.clear() self._tablename = tablename self.setquery(qtsql.qsqlquery("select * {0}".format(tablename), self.database())) however, reimplementing method in fashion broke method submitall().
inside file save method have following:
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 this gives log:
error:root:error near "set": syntax error unable execute statement error:root:error select * mytable
but when don't reimplement settable method, submitall() works without errors.
so... how circumvent "." in column name problem , have submitall() work?
btw: agree having "." in field names sql tables not idea pairing tool generates sqlite file in manner have no control over.
http://www.qtcentre.org/archive/index.php/t-7565.html
http://www.qtforum.org/article/11245/sqlite-how-to-insert-text-that-contains-character-in-field.html
looks need call 1 or both of functions below before sending database, in order sanitize input.
http://qt-project.org/doc/qt-4.8/qsqlquery.html#bindvalue
http://qt-project.org/doc/qt-4.8/qsqlquery.html#prepare
:)
hope helps.
Comments
Post a Comment