【问题标题】:What is stopping users from being inserted into the table?是什么阻止用户被插入到表中?
【发布时间】:2019-09-08 03:00:18
【问题描述】:

在对我的项目中保存到数据库的部分进行编码时,我似乎找不到正确的方法来将数据插入到表中。 应该更改/修复什么以使变量与 SQLite3 一起运行? 旁注 - 我试图插入的元素直接来自列表。变量sqluserrequest 表示列表的单个元素,格式为字符串。

现在,我收到以下语法错误:

line 42, in updatetable
    """, (sqluserrequest,))
OperationalError: near "VALUES": syntax error

截至这篇文章,我已经尝试直接从列表 I.E 中调用我需要的元素。 usertags[y],其中 y 递增以收集列表中的每个单独元素,这可以追溯到:

line 33, in updatetable
    VALUES(?)""", (usertags[y]))
ValueError: parameters are of unsupported type

我也尝试将元组更改为列表文字,但是效果不大:

line 42, in updatetable
    """, [sqluserrequest])
sqlite3.OperationalError: near "VALUES": syntax error

我也在研究字符串格式,但这似乎没有帮助。

sqluserrequest = 要保存的不和谐(列表元素)

这是 SQL 脚本:

cursor.executescript("""
    CREATE TABLE Users(
    discordid VARCHAR (37) PRIMARY KEY,
    time VARCHAR (5)
    );
    """) #create 

update.execute(""" 
    INSERT INTO Users(discordid)
    VALUES(?)""", (sqluserrequest,)) #insert


update.execute("""
        UPDATE Users
        SET time = time + 1
        WHERE name = VALUES(?)
        """, (sqluserrequest,)) #update 

光标在它们之间发生变化,但据我所知,这不应该影响程序,因为它是在不同的连接点完成的。

脚本的目的是在discordid中保存单个字符串,并将discord id对应的元素时间更新1。 通过更改变量,我只收到了上面的 SQL 错误,但程序最接近工作的是这些“接近 VALUES 语法”错误。有人能看到我的错误吗?谢谢

【问题讨论】:

    标签: python syntax sqlite


    【解决方案1】:

    这里有 SQL 语法错误:

    update.execute("""
        UPDATE Users
        SET time = time + 1
        WHERE name = VALUES(?)
        """, (sqluserrequest,)) #update 
    

    你应该说WHERE name = ?

    对于这个错误:

    line 33, in updatetable
        VALUES(?)""", (usertags[y]))
    ValueError: parameters are of unsupported type
    

    你传入的 SQL 参数错误。它需要是一个元组(或列表),但您只需在括号中输入一个值。指定带有一项的元组的权利是(usertags[y],),带有额外的逗号。

    【讨论】:

    • 谢谢,我已经对更新语句进行了这些更改并将参数更改为元组,但是现在我遇到了不受支持的数据类型错误。 InterfaceError: Error binding parameter 0 - probably unsupported type.
    • @Dandy 所以错误说明了这一点。您需要检查 usertags[y] 是否被 sqlite 库支持和理解。例如,传递一个随机对象通常不起作用,因为 sqlite 库不知道如何用 C 表示它(因为 sqlite API 是用 C 编写的)。
    • 全部修复!我确保数据类型是 C 接受的,然后我将创建表脚本中的预期数据类型从 INTEGER 更改为 INT。感谢您的回复@adrtam
    猜你喜欢
    • 2019-12-15
    • 1970-01-01
    • 2021-07-28
    • 2011-05-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-16
    • 2015-07-07
    相关资源
    最近更新 更多