从Python将数据插入MySQL数据库

时间:2013-03-27 23:43:48

标签: python mysql sql

我有两张桌子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() 

2 个答案:

答案 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。