首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQLite加入OperationalError

SQLite加入OperationalError
EN

Stack Overflow用户
提问于 2016-11-18 03:12:39
回答 1查看 32关注 0票数 0

在使用join运行这段SQL代码时,我得到一个错误:

代码语言:javascript
复制
    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  '

错误是:

代码语言:javascript
复制
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炼金术。

EN

回答 1

Stack Overflow用户

发布于 2016-11-18 03:22:05

如果您有一个名为table的表,则需要对其进行引号,否则会导致解析错误。这将会起作用:

代码语言:javascript
复制
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或其他DB库的其他场景中,当您不是手工编写SQL时,它们可能不够智能,无法自动引用表名。如果您从SQLite迁移到另一个数据库,这也会让您感到头疼。这可能会让阅读代码的人感到困惑。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40663163

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档