首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何修复我的sqllite3交互?

如何修复我的sqllite3交互?
EN

Stack Overflow用户
提问于 2020-10-06 13:24:55
回答 1查看 51关注 0票数 0

我试图获得一个管理帐户,以编辑一个‘排名’(基本上访问级别)的一个配置文件在我的数据库。错误是:

代码语言:javascript
复制
Traceback (most recent call last):
  File "U:/A-level Computor Science/Y12-13/SQL/sqlite/Databases/ork task/Python for SQL V_2.py", line 154, in <module>
    main()
  File "U:/A-level Computor Science/Y12-13/SQL/sqlite/Databases/ork task/Python for SQL V_2.py", line 9, in main
    start_menu()
  File "U:/A-level Computor Science/Y12-13/SQL/sqlite/Databases/ork task/Python for SQL V_2.py", line 22, in start_menu
    login()
  File "U:/A-level Computor Science/Y12-13/SQL/sqlite/Databases/ork task/Python for SQL V_2.py", line 72, in login
    Mek_menu()
  File "U:/A-level Computor Science/Y12-13/SQL/sqlite/Databases/ork task/Python for SQL V_2.py", line 108, in Mek_menu
    where Uzaname = %s""" % (NewRank, Findaname))
sqlite3.OperationalError: unrecognized token: "0rk_D4T4B453"`

似乎存在问题的代码是:

代码语言:javascript
复制
cursor.execute(""" update 0rk_D4T4B453.Da_Boyz
                   set Rank = %s
                   where Uzaname = %s""" % (NewRank, Findaname))

最初,它是在一条线上,但它没有工作,现在我已经尝试了多行,但它仍然不工作。所以我在这里查了看有没有人能帮忙。

EDIT1:谢谢你的建议。他们都没有修复代码,但我已经将问题代码缩小为:where Uzaname = %s""" % (NewRank, Findaname))

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-10-06 18:34:58

除非使用ATTACH,否则SQLite (文件级数据库)不会识别其他数据库。通常是服务器级数据库(Oracle、Postgres、Server等)使用database.schema.table引用。但是,在SQLite中,您连接到的数据库文件是范围内的主数据库。但是ATTACH允许您连接到其他SQLite数据库,然后识别database.table引用。

此外,关于最佳做法:

  • sqlite3和任何其他Python中,对文字值使用参数化,不要将值格式化为SQL语句。
  • 在一般Python中,停止使用)字符串模运算符%。使用str.format或最近的F-string进行字符串格式设置。但这里都不需要。

总之,如果连接到0rk_D4T4B453数据库,只需在没有数据库引用的情况下进行查询:

代码语言:javascript
复制
conn = sqlite3.connect('/path/to/0rk_D4T4B453.db')
cursor = conn.cursor()

# PREPARED STATEMENT WITH QMARK PLACEHOLDERS
sql = """UPDATE Da_Boyz
         SET Rank = ?
         WHERE Uzaname = ?"""

# BIND WITH TUPLE OF PARAMS IN SECOND ARG
cursor.execute(sql, (NewRank, Findaname))
conn.commit()

如果确实连接到不同的数据库,请调用ATTACH。在这里,您也可以使用更好的命名而不是数字引导标识符来别名其他数据库。

代码语言:javascript
复制
cursor.execute("ATTACH '/path/to/0rk_D4T4B453.db' AS other_db")

sql = """UPDATE other_db.Da_Boyz
         SET Rank = ?
         WHERE Uzaname = ?"""

cursor.execute(sql, (NewRank, Findaname))
conn.commit()

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

https://stackoverflow.com/questions/64226764

复制
相关文章

相似问题

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