2016-11-17 55 views
0

當運行這個SQL代碼加入,我得到了一個錯誤:SQLite的加入OperationalError

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。

回答

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_tablealter table mytable等)的保留字,並用SQL的語法分析器是原始的,或規範要求它這樣的行爲(PostgreSQL的有同樣的問題)。

我強烈建議您將table重命名爲其他東西,如果可以的話,或者您將要進入受傷的世界。在使用SQLAlchemy或其他數據庫庫的其他場景中,當您不是手工製作SQL時,它們可能不夠聰明,無法自動引用表名。如果你從SQLite遷移到另一個數據庫,這也會讓你頭疼。這很可能會讓人們讀代碼時感到困惑。