2015-10-18 144 views
1

我想用后续脚本来填充我的数据库,它根本不运行查询,而是直接去除except和打印错误消息。任何人都可以有()称为insertGuest功能识别问题:使用python脚本填充数据库

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") 

我也想数据,尤其是名字是有意义的,但如果我可以得到随机字符串,然后将只需要做。

感谢SQL 夏季

+1

你可以尝试traceback'加上'你'except'所以你知道为什么它给你的错误。除此之外,这是一个“为什么不是我的代码工作”的问题,这是脱离主题的SO。 – Leb

回答

2

字符值单引号,数字都没有引用。正如您尝试的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]) 

(这是假设你导入MySQLdb的与import MySQLdb as mdb,否则相应的调整mdb名称。)

+0

谢谢。我试过这个,但它仍然不采取查询,而是运行错误语句。 – summerdaiz

+1

啊,我明白了。它至少应该生成有效的SQL,因此可能会有其他因素,例如游标/连接的状态或有关表的信息。至少,正如@leb所建议的那样,您应该从“except”,追溯或至少一个错误描述中获得更多信息。 –

+0

我结束了刚刚使用for循环,并拿出了尝试/除了。我是编程新手,所以我会采取微小的工作步骤。另外显然MySQLdb库不适用于我的版本。 – summerdaiz