我试图获得一个管理帐户,以编辑一个‘排名’(基本上访问级别)的一个配置文件在我的数据库。错误是:
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"`似乎存在问题的代码是:
cursor.execute(""" update 0rk_D4T4B453.Da_Boyz
set Rank = %s
where Uzaname = %s""" % (NewRank, Findaname))最初,它是在一条线上,但它没有工作,现在我已经尝试了多行,但它仍然不工作。所以我在这里查了看有没有人能帮忙。
EDIT1:谢谢你的建议。他们都没有修复代码,但我已经将问题代码缩小为:where Uzaname = %s""" % (NewRank, Findaname))
发布于 2020-10-06 18:34:58
除非使用ATTACH,否则SQLite (文件级数据库)不会识别其他数据库。通常是服务器级数据库(Oracle、Postgres、Server等)使用database.schema.table引用。但是,在SQLite中,您连接到的数据库文件是范围内的主数据库。但是ATTACH允许您连接到其他SQLite数据库,然后识别database.table引用。
此外,关于最佳做法:
sqlite3和任何其他Python中,对文字值使用参数化,不要将值格式化为SQL语句。%。使用str.format或最近的F-string进行字符串格式设置。但这里都不需要。总之,如果连接到0rk_D4T4B453数据库,只需在没有数据库引用的情况下进行查询:
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。在这里,您也可以使用更好的命名而不是数字引导标识符来别名其他数据库。
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")https://stackoverflow.com/questions/64226764
复制相似问题