在Python中执行多条语句时出错

1 投票
2 回答
5121 浏览
提问于 2025-04-16 18:04

我正在学习Python,还是个新手。

我想用Python和MySQL来写函数,但遇到了一些错误。

这是我的代码:

import MySQLdb
def insert_values(cursor, values):
    #cursor = self.connection.cursor()
    cursor.executemany("""
        insert into pythontest (name1,name2,name3)
        values (%s, %s, %s)""", values)
    cursor.close()

db = MySQLdb.connect("localhost","root","root","python" )
cursor = db.cursor()

var1 = ['name1','name2','name3']
insert_values(cursor,var1)

db.close()

可能有很多错误,因为我还在学习。

1)我不知道怎么把数据库对象传递给函数,或者传递游标可以吗?因为我需要在循环中多次调用这个函数。

2)值数组的语法是否正确,可以放进数据库里吗?

错误信息:

File "mysql.py", line 10, in insert_values
    values (%s, %s, %s)""", values)
  File "build/bdist.linux-i686/egg/MySQLdb/cursors.py", line 216, in executemany
  File "build/bdist.linux-i686/egg/MySQLdb/connections.py", line 36, in defaulterrorhandler
_mysql_exceptions.ProgrammingError: not enough arguments for format string

2 个回答

2

在编程中,有时候我们会遇到一些问题,尤其是在使用特定的工具或库时。比如,有人可能在使用某个库时,发现它的某些功能不太好用,或者在文档里找不到想要的信息。这种情况下,大家通常会去问问题,看看有没有人遇到过类似的情况,或者有没有解决方案。

在这些讨论中,大家会分享自己的经验,可能会提供一些代码示例,帮助其他人更好地理解问题所在。这样一来,大家就可以互相学习,找到解决问题的方法。

总之,编程的过程中,遇到问题是很正常的,重要的是要积极寻求帮助,并且分享自己的经验,这样才能不断进步。

cursor.executemany("""
        insert into pythontest (name1,name2,name3)
        values (%s, %s, %s)""", *values)
1

这是我会这样写的(不过还没测试过):

import MySQLdb

def insert_values(db, values):
    cursor = db.cursor()
    try:
        try:
            cursor.execute("""
            insert into pythontest (name1,name2,name3)
            values (%s, %s, %s)""", *values)
        except:
            db.rollback()
            raise
        else:
            db.commit()
    finally:
        cursor.close()

db = MySQLdb.connect("localhost","root","root","python" )

vars = ('name1','name2','name3')
insert_values(db, vars)

db.close()

光标(cursor)开始一个事务(transaction),所以你不想在多个更新中重复使用同一个光标,除非这些更新是一个原子事务(atomic transaction)的一部分。

撰写回答