首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >python中的SQLite报告了一个SyntaxError,但是SQLite控制台没有问题

python中的SQLite报告了一个SyntaxError,但是SQLite控制台没有问题
EN

Stack Overflow用户
提问于 2022-05-12 02:27:27
回答 1查看 39关注 0票数 0

我想在数据库中插入一些数据,并使用下面的代码,但是当我运行它时,python解释器重新部署了sqlite3.OperationalError: near "s": syntax error。然后,我将python insert into movie250(info_link, pic_link, chinese_name, other_name, score, rate, introduction, info) values ('https://movie.douban.com/subject/1292052/', 'https://img2.doubanio.com/view/photo/s_ratio_poster/public/p480747492.jpg', '肖申克的救赎', 'The Shawshank Redemption', 9.7, 2615494, '希望让人自由', '导演: 弗兰克·德拉邦特 Frank Darabont   主演: 蒂姆·罗宾斯 Tim Robbins ... 1994   美国   犯罪 剧情')打印的sql复制到sqlite控制台,没有任何问题。

代码语言:javascript
运行
复制
def save_data_to_db(data: list | None,
                    db_url: str) -> None:
    conn: sqlite3.Connection = init_database(db_url)
    print('Database loaded...')

    cursor: sqlite3.Cursor = conn.cursor()

    for datum in data:
        sql = "insert into movie250" \
              "(" \
              "`info_link`, " \
              "`pic_link`, " \
              "`chinese_name`, " \
              "`other_name`, " \
              "`score`, " \
              "`rate`, " \
              "`introduction`, " \
              "`info`" \
              ") " \
              "values " \
              f"('{datum[0]}', '{datum[1]}', '{datum[2]}', '{datum[3]}', {datum[4]}, {datum[5]}, '{datum[6]}', '{datum[7]}')"
        print(f"Executing sql: [{sql}]")
        cursor.execute(sql)
        conn.commit()

    return None

我试着调试它,我发现值sql是

控制台报告:

发生错误之前的最后一次sql运行:

代码语言:javascript
运行
复制
insert into movie250(`info_link`, `pic_link`, `chinese_name`, `other_name`, `score`, `rate`, `introduction`, `info`) values ('https://movie.douban.com/subject/1291561/', 'https://img1.doubanio.com/view/photo/s_ratio_poster/public/p2557573348.jpg', '千与千寻', '千と千尋の神隠し', 9.4, 2043030, '最好的宫崎骏,最好的久石让 ', '导演: 宫崎骏 Hayao Miyazaki   主演: 柊瑠美 Rumi Hîragi   入野自由 Miy... 2001   日本   剧情 动画 奇幻')

完整堆栈跟踪报告:

代码语言:javascript
运行
复制
Traceback (most recent call last):
  File "C:\Program Files\JetBrains\PyCharm 2021.3.3\plugins\python\helpers\pydev\pydevd.py", line 1483, in _exec
    pydev_imports.execfile(file, globals, locals)  # execute the script
  File "C:\Program Files\JetBrains\PyCharm 2021.3.3\plugins\python\helpers\pydev\_pydev_imps\_pydev_execfile.py", line 18, in execfile
    exec(compile(contents+"\n", file, 'exec'), glob, loc)
  File "D:/workspace/python/douban-movies-spider/main.py", line 214, in <module>
    save_data_to_db(data_list, "./movies.db")
  File "D:/workspace/python/douban-movies-spider/main.py", line 199, in save_data_to_db
    cursor.execute(sql)
sqlite3.OperationalError: near "s": syntax error
EN

回答 1

Stack Overflow用户

发布于 2022-05-12 03:27:09

  1. 将所有项转换为列表

中的元组。

代码语言:javascript
运行
复制
for index in range(len(data)):
        data[index] = tuple(data[index])

  1. 生成这样的sql:

代码语言:javascript
运行
复制
sql = "insert into movie250(`info_link`, `pic_link`, " \
          "`chinese_name`, `other_name`, `score`, " \
          "`rate`, `introduction`, `info`) " \
          "values " \
          "(?, ?, ?, ?, ?, ?, ?, ?)"

然后使用游标运行cursor.executemany()

代码语言:javascript
运行
复制
cursor.executemany(sql, data)

感谢@SuperStormer的评论,所有这些人都给出了这个想法。

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

https://stackoverflow.com/questions/72209488

复制
相关文章

相似问题

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