我有两张桌子TBL1和TBL2。 TBL1有3列date,id,nSql。 TBL2有3列date,custId,userId。 我在TBL1中有17行,ID为1到17(后面会增长)。 每个nSql都有一个SQL查询。 例如,id = 1的nSql是:“选择日期,pId为custId,tId为来自TBL3的userId” 例如,id = 2的nSql是:“选择日期,qId为custId,rId为来自TBL4的userId” ... nSql结果总是相同的3列。
以下查询仅针对id = 1运行nSql。所以,在TBL2中,我只输出nSql = 1。我想要所有nSql的结果。我希望我的查询运行所有nSql 不只是id = 1。
import MySQLdb
# Open database connection
con=MySQLdb.Connection(host="localhost", user="root", passwd="root", db="test")
# create a cursor object using cursor() method
cur=con.cursor()
selectStatement=("select nSql from TBL1") # I do not want to limit the number of id to select. For example, I do not want: select nSql from TBL1 where id in (1, 2, ..17)
cur.execute(selectStatement)
res=cur.fetchone()
nSql=res[0]
cur.execute(nSql)
reslt=cur.fetchall()
for row in reslt:
date= row[0]
custId= row[1]
userId=row[2]
insertStatement=("insert into TBL2( date, custId, userId) values ('%s', %d, %d)" % (date, custId, userId))
cur.execute(insertStatement)
con.commit()
答案 0 :(得分:0)
您已获取nSql
结果并在其上循环。你需要遍历两个:
cur.execute(selectStatement)
res = cur.fetchall()
for outerrow in res:
nSql = outerrow[0]
cur.execute(nSql)
# rest of your code
答案 1 :(得分:0)
你在这里:
res=cur.fetchone()
nSql=res[0]
cur.execute(nSql)
这意味着您只获取第一个ID(因为您写了fetchone()
)。在这种情况下,ID等于1.您可以继续调用fetchall()
并使用循环,您可以访问所有ID。