使用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 Alchemy。
答案 0 :(得分:1)
如果您有一个名为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或其他数据库库的其他场景中,当您不是手工制作SQL时,它们可能不够智能,无法自动引用表名。如果从SQLite迁移到另一个数据库,这也会让您头疼。它可能会让人们在阅读代码时感到困惑。