在使用join运行这段SQL代码时,我得到一个错误:
ss= 'select project.id from project_list pl '
ss+= ' LEFT JOIN project p ON pl.project_id = p.id '
ss+= ' LEFT JOIN table t ON pl.table_id = t.id '错误是:
OperationalError: (sqlite3.OperationalError) near "table":
syntax error [SQL: 'select project.id from project_list pl
LEFT JOIN project p ON pl.project_id = p.id LEFT JOIN table t
ON pl.table_id = t.id ']这不是错误的来源,因为SQL语句看起来是正确的。这是使用SQL炼金术。
发布于 2016-11-18 03:22:05
如果您有一个名为table的表,则需要对其进行引号,否则会导致解析错误。这将会起作用:
ss= 'select project.id from project_list pl '
ss+= ' LEFT JOIN project p ON pl.project_id = p.id '
ss+= ' LEFT JOIN "table" t ON pl.table_id = t.id '这是因为table是SQL中的保留字(例如create table my_table、alter table mytable等),或者SQL解析器是原始的,或者规范要求它以这种方式运行(PostgreSQL也有同样的问题)。
如果可以的话,我强烈建议您将table重命名为其他名称,否则您将陷入一个痛苦的世界。在使用SQLAlchemy或其他DB库的其他场景中,当您不是手工编写SQL时,它们可能不够智能,无法自动引用表名。如果您从SQLite迁移到另一个数据库,这也会让您感到头疼。这可能会让阅读代码的人感到困惑。
https://stackoverflow.com/questions/40663163
复制相似问题