我正在尝试使用以下脚本填充我的数据库,该脚本根本不运行查询,而是直接转到except并打印错误消息。任何人都可以使用名为insertGuest()的函数识别问题:
for i in range (100):
addGuest = "INSERT INTO hotel_guests VALUES (\"%d\", \"%s\"%s \"%s\")", (int(i), "Name"+str(i),"gender"+str(i))
try:
mycursor.execute(addGuest)
conn.commit()
print ("10000 Guests Successfully Inserted")
except:
conn.rollback()
print ("An error occurred")
我也想要数据,尤其是名称有意义,但是如果我可以获得随机字符串那么就必须这样做。
由于 夏季
答案 0 :(得分:2)
SQL中的字符值是单引号,数字没有引号。在您尝试Python字符串格式时需要" %
"字符串和参数之间的元组。所以你会有这样的事情:
addGuest = "INSERT INTO hotel_guests VALUES (%d, '%s', '%s')" % (int(i), "Name"+str(i),"gender"+str(i))
尽管如此,为了清楚起见,您可能会更好地使用str.format()
和命名参数。见https://docs.python.org/2/library/string.html#format-string-syntax
您可能还希望改进except
的错误报告。您可以将其替换为:
except mdb.Error as e:
conn.rollback()
print "Error %d: %s" % (e.args[0],e.args[1])
(这假设您使用import MySQLdb as mdb
导入MySQLdb,否则相应地调整mdb
名称。)
答案 1 :(得分:0)
根据情况,最好将字符串与+
符号连接起来,如下所示:
addGuest = "INSERT INTO hotel_guests VALUES (" + int(i) + ", 'Name" + str(i) + "', 'gender" + str(i) + "')"
我在自己的project中采用了这种方法(用虚假/伪造但有效的数据填充数据库),因为查询时间长且复杂。您可能想看看。