0

我有 2 张表 TBL1 和 TBL2。TBL1 有 3 列日期、id、nSql。TBL2 有 3 列日期、custId、userId。我在 TBL1 中有 17 行,id 为 1 到 17(稍后会增长)。每个 nSql 中都有一个 SQL 查询。例如 id=1 的 nSql 是:“select date, pId as custId, tId as userId from TBL3” 例如 nSql for id=2 是:“select date, qId as custId, rId as userId from TBL4” ... 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() 
4

2 回答 2

0

您已经获取nSql结果并对其进行循环。您需要遍历两者:

cur.execute(selectStatement)
res = cur.fetchall()
for outerrow in res:
    nSql = outerrow[0]
    cur.execute(nSql)
    # rest of your code
于 2013-03-28T00:24:44.897 回答
0

在这里你正在做:

res=cur.fetchone()
nSql=res[0]
cur.execute(nSql)

这意味着您只使用第一个 ID(因为您写了fetchone())。在这种情况下,ID 等于 1。您可以继续调用fetchall(),并且通过使用循环,您可以访问所有 ID。

于 2014-04-10T05:56:38.403 回答