我正在尝试在 Python 中使用 MySQLDB 进行简单的提取。
我有 2 张桌子(帐户和产品)。我必须查找 Accounts 表,从中获取 acc_id 并使用它查询 Products 表。
Products 表有 10 多行。但是当我运行这段代码时,每次运行它时它都会随机返回 0 到 6 行。
这是代码片段:
# Set up connection
con = mdb.connect('db.xxxxx.com', 'user', 'password', 'mydb')
# Create cursor
cur = con.cursor()
# Execute query
cur.execute("SELECT acc_id FROM Accounts WHERE ext_acc = '%s'" % account_num ) # account_num is alpha-numberic and is got from preceding part of the program
# A tuple is returned, so get the 0th item from it
acc_id = cur.fetchone()[0]
print "account_id = ", acc_id
# Close the cursor - I was not sure if I can reuse it
cur.close()
# Reopen the cursor
cur = con.cursor()
# Second query
cur.execute("SELECT * FROM Products WHERE account_id = %d" % acc_id)
keys = cur.fetchall()
print cur.rowcount # This prints incorrect row count
for key in keys: # Does not print all rows. Tried to directly print keys instead of iterating - same result :(
print key
# Closing the cursor & connection
cur.close()
con.close()
奇怪的是,我尝试使用调试器(Eclipse 上的 PyDev)单步执行代码,它正确地获取了所有行(存储在变量“键”中的值以及控制台输出都是正确的)。
我确信我的数据库有正确的数据,因为我在 MySQL 控制台上运行了相同的 SQL 并得到了正确的结果。
为了确保我没有不正确地关闭连接,我尝试使用with con
而不是手动关闭连接,结果相同。
我做了RTM,但我找不到太多可以帮助我解决这个问题的东西。
我哪里错了?
谢谢你。
编辑:我现在注意到另一个奇怪的事情。在该行
cur.execute("SELECT * FROM Products WHERE account_id = %d" % acc_id)
中,我对 acc_id 值进行了硬编码,即创建它
cur.execute("SELECT * FROM Products WHERE account_id = %d" % 322)
并返回所有行