【发布时间】:2018-07-25 05:13:30
【问题描述】:
我在 python 上工作。我有一个查询,我的数据库上有 3 个表。
我已连接到一个 db,并从一个 mysql 表中提取了两列 (idnum,clientname) 中的所有行,例如(1234,雷诺兹), (1235,雷诺兹2)
然后每个 idnum 都有一个单独的表,例如sample_divya_1234;sample_divya_1235,我们需要从每个表中获取所有电子邮件和 lname。 (注:每个idnum有很多email和lname记录)
步骤 1 中获取的所有客户端名称都存在于另一个表 sample_divya3 中,因此对于每个客户端名称都需要提取 fname,例如(saha,renolds)
现在必须将 email、lname、fname 全部放入新表 sql_table1
输入表
Sample_divya1:
+-----+------------+---
| idnum | clientname |
+-------+------------+-
| 1234 | renold |
| 1235 | renold1 |
+-------+------------+
sample_divya_1234:
+-------------------+----------+
| email | lname |
+-------------------+----------+
| abc@yahoo.com | abcd |
| bcd@gmail.com | bcda |
+-------------------+----------+
**sample_divya_1235**
+------------------+-----------+
| email | lname |
+------------------+-----------+
| xyz@gmail.com | xyza |
| nag@gmail.com | sai |
| hij@gmail.com | klm |
+------------------+-----------+
sample_divya3:
+--------+------------+
| fname | clientname |
+--------+------------+
| saha | renold |
| hasini | renold1 |
+--------+------------+
PRG:
import pandas as pd
import pymysql
import pymysql.cursors
from sqlalchemy import create_engine
from time import time
import datetime
conn=pymysql.connect(CONNECTDETAILS)
query = "select idnum from sample_divya1"
cursor=conn.cursor()
cursor.execute(query)
data = cursor.fetchall()
cursor.execute("drop table if exists sql_table1")
sql_table = "create table sql_table1(email varchar(128),lname varchar(128),fname varchar(128))"
cursor.execute(sql_table)
for id in data:
cursor.execute("select A.idnum, B.fname, B.clientname,C.lname,C.email from (select idnum,clientname from sample_divya1)A cross join (select fname,clientname from sample_divya3 )B where A.clientname=B.clientname cross join (select email, lname from sample_divya_"+id[0]+")C where A.idnum =id")
data_1=cursor.fetchall()
conn.commit()
print data_1
cursor.executemany("insert into sql_table1 (email,lname,fname) values (?,?,?)",data_1)
conn.commit()
conn.commit()
需要输出:
+------------------+----------+--------+
| email | lname | fname |
+------------------+----------+--------+
| abc@yahoo.com | abcd | saha |
| bcd@gmail.com | bcda | saha |
| xyz@gmail.com | xyza | hasini |
| nag@gmail.com | sai | hasini |
| hij@gmail.com | klm | hasini |
错误出现在我的查询中突出显示的部分
""" # cursor.execute("select B.fname,C.lname,C.email from (select idnum,clientname from sample_divya1)A cross join (select fname,clientname from sample_divya3)B where A.clientname= B.clientname cross join (select email, lname from sample_divya_"+id[0]+")C where A.idnum = id")"""
在这里,了解了“'where 子句中的未知列'id'” 所以有人可以在这个where子句中提供帮助
【问题讨论】:
-
我建议创建接受源参数并返回您需要的整个输出的存储过程。