【问题标题】:mySQL MULTIPLE ROWS DYNAMIC INSERT PYTHONmySQL 多行动态插入 Python
【发布时间】:2018-06-20 09:56:38
【问题描述】:

我的目标是在表中添加多行数据,但每次都会出错,我尝试了代码的多种变体,很抱歉没有早点问这个问题,我不知道怎么做,我不使用很多堆栈溢出。

更新的代码在最后。

错误:

Traceback (most recent call last):
  File "G:/Python/sqlconnector4.py", line 25, in <module>
    entry_table(number)
  File "G:/Python/sqlconnector4.py", line 17, in entry_table
    c.execute("INSERT INTO T1 (NAME , ADDRESS ) VALUES (thelist.split("'',''"))")
  File "C:\Users\tushar\AppData\Local\Programs\Python\Python36-32\lib\site-packages\mysql\connector\cursor.py", line 559, in execute
    self._handle_result(self._connection.cmd_query(stmt))
  File "C:\Users\tushar\AppData\Local\Programs\Python\Python36-32\lib\site-packages\mysql\connector\connection.py", line 494, in cmd_query
    result = self._handle_result(self._send_cmd(ServerCmd.QUERY, query))
  File "C:\Users\tushar\AppData\Local\Programs\Python\Python36-32\lib\site-packages\mysql\connector\connection.py", line 396, in _handle_result
    raise errors.get_exception(packet)
mysql.connector.errors.ProgrammingError: 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1

Error

import mysql.connector

my=mysql.connector.connect(host='localhost' , user='root' , password='rootroot' , database='tushar')
c=my.cursor()

def create_table():
    c.execute("CREATE TABLE IF NOT EXISTS T1 (ID INT AUTO_INCREMENT PRIMARY KEY, NAME VARCHAR(30) NOT NULL , ADDRESS VARCHAR(50) NOT NULL)")
    my.commit()

def entry_table(n):
    thelist = []  
    for x in range(0,n) :
        user_name = input("ENTER NAME NUMBER {}: ".format(x+1))
        user_state = input("ENTER STATE {} LIVES IN : ".format(user_name))
        thelist.append(user_name)
        thelist.append(user_state)
        c.execute("INSERT INTO T1 (NAME , ADDRESS ) VALUES (thelist.split("'',''"))")
        my.commit()
    for x in range(0,n) :
        c.execute("SELECT * FROM T1")

number = int(input("Enter The Number of Rows You want to Fill : "))

create_table()
entry_table(number)

导入 mysql.connector

my=mysql.connector.connect(host='localhost' , user='root' , password='rootroot' , 数据库='tushar') c=my.cursor()

定义创建表():

c.execute("CREATE TABLE IF NOT EXISTS T1 (ID INT AUTO_INCREMENT PRIMARY KEY, NAME VARCHAR(30) NOT NULL , ADDRESS VARCHAR(50) NOT NULL)")
my.commit()

def entry_table(n):

for x in range(0,n) :
    user_name = input("ENTER NAME NUMBER {}: ".format(x+1))
    user_state = input("ENTER STATE {} LIVES IN : ".format(user_name))
    c.execute("INSERT INTO T1 (NAME , ADDRESS ) VALUES ( ? , ?)", user_name , user_state )
    my.commit()

c.execute("SELECT * FROM T1")
myresult = c.fetchall()

for x in myresult:
      print(x)

number = int(input("输入要填充的行数:")) 创建表() entry_table(数字) c.close() 我的.close()

【问题讨论】:

  • 不错的代码,但没有任何问题,所以我真的不知道你希望我们做什么。
  • 我希望能够一次性向表中添加多行,我收到此代码错误,我似乎无法使其工作。
  • 考虑在您的问题中添加错误消息。
  • @TusharGuliany 请将确切的错误消息添加到问题中,并在此处指出您收到错误消息的代码行。请提供问题的背景,例如您想要实现的具体目标以及预期结果应该是什么样的。如果不提供这些基本信息,我真的不明白您希望我们如何帮助您。
  • @Shadow 我做了,我更新了帖子,请帮助我。谢谢

标签: python mysql python-idle


【解决方案1】:

错误是因为您将 python 语法作为 sql 语句的一部分传递,并且命令没有意义。许多修复,最简单的一个是您不需要列表

def entry_table(n):
    for x in range(0,n) :
        user_name = input("ENTER NAME NUMBER {}: ".format(x+1))
        user_state = input("ENTER STATE {} LIVES IN : ".format(user_name))
        data = (user_name, user_state)
        c.execute("INSERT INTO T1 (NAME , ADDRESS ) VALUES (%s, %s);", data)
        my.commit()
    c.execute("SELECT * FROM T1")
    print(c.fetchall())

其他一些超出范围但相关的事情:

  1. 事务可以在循环之后提交,因为我们没有访问它之前的数据。
  2. 游标永远不会关闭。
  3. 连接永远不会关闭。

编辑:将?,? 替换为%s, %s per API Docs

【讨论】:

  • 您好先生,谢谢您的回答,它现在不会导致任何错误,但它仍然无法正常工作,该行未添加到表中。它接受输入,仅此而已,屏幕上没有其他输出。
  • @TusharGuliany 屏幕上不会有任何输出,因为您没有使用fetchall() 来获取c.execute("SELECT * FROM T1") 的结果
  • 尝试基于 MySQL 的 API 文档的更新代码。我之前所拥有的似乎在 MySQL 中无效。是的,需要调用 fetchall。此外,这不必是一个循环。我出去了,所以很难在电话上格式化答案。不过会继续尝试一下。同时,如果需要,您可以直接在数据库中查看。
  • 成功了,谢谢,好像错误是“?” . MySQL 接受 '%' 方法或 format 方法,但由于 format 不适用,因为它需要在 sql 语句中替换。非常感谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-13
相关资源
最近更新 更多