为了账号安全,请及时绑定邮箱和手机立即绑定

sqlite3.OperationalError:“索引”附近:语法错误

sqlite3.OperationalError:“索引”附近:语法错误

摇曳的蔷薇 2021-09-24 21:21:27
我正在尝试使用 sqlite3 模块使用 python 连接到数据库,但出现错误 - sqlite3.OperationalError: near "index": syntax error我为此搜索了一些解决方案,但没有得到解决方案。我是 sqlite3 的新手def insert_into_db(url, title, description, keywords):    con = sqlite3.connect('index.db')    c = con.cursor()    create = r'''CREATE TABLE IF NOT EXISTS index (id INTEGER NOT NULL AUTO_INCREMENT,url VARCHAR,description TEXT,keywords TEXT);INSERT INTO index(url, title, description, keywords)VALUES('{}','{}',{}','{}');'''.format(url, title,description, keywords)    c.execute(create)    con.commit()    con.close()
查看完整描述

2 回答

?
烙印99

TA贡献1829条经验 获得超13个赞

INDEX是 SQLite3 中的关键字。因此,它将被解析为关键字。不过,有几种方法可以解决这个问题。


根据文档,您可以使用反引号或引号将其指定为表名。例如,


CREATE TABLE IF NOT EXISTS `index` ...

或者


CREATE TABLE IF NOT EXISTS "index" ...

可能工作。


您可以将参数从execute()命令传递给您的 sql 语句。因此,


create = r'''CREATE TABLE ... VALUES(?,?,?,?);'''  # use ? for placeholders

c.execute(create, (url, title, description, keywords))  # pass args as tuple

与直接使用 Python 格式化参数相比,这更安全。


另请注意,SQLite 的 autoinc 语法AUTOINCREMENT没有下划线,并且它们要求该字段也是INTEGER PRIMARY KEY.


查看完整回答
反对 回复 2021-09-24
?
慕勒3428872

TA贡献1848条经验 获得超6个赞

您不能命名表indexINDEX是保留关键字。

文件指出:

SQL 标准指定了大量关键字,这些关键字不得用作表、索引、列、数据库、用户定义函数、排序规则、虚拟表模块或任何其他命名对象的名称。


查看完整回答
反对 回复 2021-09-24
  • 2 回答
  • 0 关注
  • 584 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号