【问题标题】:populate database with python script使用 python 脚本填充数据库
【发布时间】:2016-01-16 14:20:17
【问题描述】:

我正在尝试使用以下脚本填充我的数据库,该脚本根本不运行查询,而是直接转到异常并打印错误消息。任何人都可以通过名为 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")

我也希望数据,尤其是有意义的名称,但如果我可以得到随机字符串,那么就必须这样做。

谢谢 夏天

【问题讨论】:

  • 您可以尝试将traceback 添加到您的except 中,这样您就知道为什么会出现错误。除此之外,这是一个“为什么我的代码不起作用”的问题,这与 SO 无关。

标签: python mysql sql database populate


【解决方案1】:

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 名称。)

【讨论】:

  • 谢谢。我试过了,但它仍然不接受查询,而是运行错误语句。
  • 啊,我明白了。它现在至少应该生成有效的 SQL,因此可能存在其他因素,例如游标/连接的状态或有关表的某些内容。至少,正如@leb 建议的那样,您应该从except 获得更多信息、回溯或至少是错误描述。
  • 我最终只使用了一个 for 循环并取出了 try/except。我是编程新手,所以我会采取一些微小的工作步骤。此外,显然 MySQLdb 库不适用于我的版本。
【解决方案2】:

根据具体情况,最好将字符串与+ 符号连接起来,如下所示:

addGuest = "INSERT INTO hotel_guests VALUES (" + int(i) + ", 'Name" + str(i) + "', 'gender" + str(i) + "')"

我在我的project 中采用了这种方法(用虚假/虚假但有效的数据填充数据库),因为查询既长又复杂。你可能想看看。

【讨论】:

    猜你喜欢
    • 2018-12-16
    • 2016-09-01
    • 2017-10-24
    • 2011-03-02
    • 2011-12-14
    • 2020-05-23
    • 2018-01-29
    • 2019-07-01
    • 1970-01-01
    相关资源
    最近更新 更多