【问题标题】:Mysql insert. Can´t use multiple character valuemysql插入。不能使用多个字符值
【发布时间】:2019-04-25 13:40:14
【问题描述】:

如果我尝试将多个字符值(如“12”)插入到我的数据库中,它将无法正常工作。 错误信息: Incorrect number of arguments executing prepared Statement

如果我尝试将单个字符值(如“9”)插入到我的数据库中,它会起作用。

我的错误在哪里?

我尝试过的事情: 我在代码的不同位置将变量设置为永久值。

结果是,它只适用于大于 9 的值,如果该值在查询中是静态的。

例如: query = """insert into Sklaven (Adresse) values(12)""" result = cursor.execute(query)

如果我做动态它不会工作。 例如。: query = """insert into Sklaven (Adresse) values(%s)""" result = cursor.execute(query, Wert) 或者 result = cursor.execute(query, "12")

完整代码:

Import mysql.connector

def insert_Value(Adressen):
  try:
    connection = mysql.connection.connect(host= '*.*.*.*', 
               database ='*',
               user = '*',
               Password ='*')
    Cursor = Connection.cursor(prepared=True)
    query = """insert into Sklaven (Adresse) values(%s)"""
    Wert = Adressen
    print ("Value = ", Wert)          #showing current value
    print ("len = ", len(Wert))       #showing lenght of current value
    result = cursor.execute(query, Wert)
    print("ok")
    connection.commit()
  expect mysql.connector.Error as error:
    connection.rollback()
    print("not ok {}".format(error))

S=8

for x in range(0,7):
  S = str(S)
  inserr_Value(S)
  S=int(S)
  S=S+1

壳牌回报:

value = 8
len = 1
ok
value = 9
len = 1
ok
value = 10
len = 2
not ok 1210: Incorrect number of arguments executing prepared Statement
value = 11
len = 2
not ok 1210: Incorrect number of arguments executing prepared Statement
value = 12
len = 2
not ok 1210: Incorrect number of arguments executing prepared Statement
value = 13
len = 2
not ok 1210: Incorrect number of arguments executing prepared Statement
value = 14
len = 2
not ok 1210: Incorrect number of arguments executing prepared Statement

【问题讨论】:

  • insert_tuple 在哪里定义?我只看到它在查询中使用,但没有定义。
  • result = cursor.execute(query, "12"):在此处使用实际的元组(根据您的非工作示例代码):result = cursor.execute(query, (12,))。让我们知道它是否以及如何工作(注意:如果 12 应该是一个数字,请去掉引号)。
  • Adresse的列类型是什么?一个整数,一个字符串,还是别的什么?
  • 要在列表中插入存在的值,您可以使用循环。 for item in list: query_to_insert(item)
  • 抱歉。当然应该是result = cursor.execute(query, Wert),而不是result = cursor.execute(query, insert_tuple)

标签: python mysql-python


【解决方案1】:

你在做吗

tuple_result = tuple(Wert)

就在实际查询之前,有什么机会吗?

在 Python 命令行上尝试 tuple("12"),然后您会发现问题所在:它显示为 ('1', '2')。在这种情况下,字符串通常被视为许多操作的字符列表(或 unicode 代码点,如果您愿意)。

相反,您应该将元组简单地构造为

tuple_result = (Wert,)

紧随其后

result = cursor.execute(query, insert_tuple)

(您甚至可以使用tuple_result = Wert,,但为了清楚起见,我不会这样做)。

【讨论】:

  • 将:Wert = Adressen 更改为 Wert =(Adressen,) 解决了我的问题。非常感谢。
猜你喜欢
  • 1970-01-01
  • 2011-01-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-14
  • 1970-01-01
  • 1970-01-01
  • 2014-08-12
相关资源
最近更新 更多