在Python中执行多条语句时出错
我正在学习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)的一部分。