【问题标题】:Inserting tuple values into mysql table using pymysql.cursor()使用 pymysql.cursor() 将元组值插入 mysql 表
【发布时间】:2018-12-26 06:37:44
【问题描述】:

第 1 步:首先我连接到一个数据库并从一个 mysql 表中拉出 2 列中的所有行 (idnum,clientname) 例如:(1234,renolds),(1235,renolds2)

Step2:然后每个idnum有一个单独的表 例如:sample_divya_1234;sample_divya_1235, 我们需要从每个表中获取所有电子邮件和 lname。
(注意:每个 idnum 都有许多电子邮件和 lname 记录)

Step3:在step1中获取的所有clientnames都存在于另一个表sample_divya3中,因此对于每个clientname都需要提取fname 例如:(saha , renolds)

第 4 步:现在必须将 email、lname、fname 都放入新表 sql_table1 中

进程:

import pandas as pd
import pymysql
import pymysql.cursors
from sqlalchemy import create_engine
from time import time
import datetime

conn=pymysql.connect(host= ,user='',password='',db='')


query = "select idnum,clientname from sample_divya1 where date(created_date)=date(now())"
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,client in data:
    data = " select email,lname from sample_divya_"+id
    cursor.execute(data)
    conn.commit()
    df = cursor.fetchall()
    print df
    list_id="select fname from sample_divya3 where clientname='{}'".format(client)
    cursor.execute(list_id)
    conn.commit()
    data1 = cursor.fetchall()
    print data1
    print type(data1)
    for x,y in zip(df,data1):
        cursor.execute("""insert into sql_table1  values (%s,%s,%s)""", (df[0][0], df[0][1],data1[0][0]))
        conn.commit()
        dat_1 = cursor.fetchall()
        print dat_1
conn.commit()
conn.close()

获取输出:

+-----------------+----------+--------+
| email           | lname    | fname  |
+-----------------+----------+--------+
| abc@yahoo.com   | abcd     | saha   |
| xyz@gmail.com   | xyza     | hasini |
+-----------------+----------+--------+

但需要输出:

+------------------+----------+--------+
| 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 |
+------------------+----------+--------+

输入表: 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      |
    +--------+------------+

请帮帮我

【问题讨论】:

    标签: python mysql-python pymysql


    【解决方案1】:

    试试这个

    self.cursor.execute("insert ignore into " + options.youtube_table_name + " (" + ",".join(data.keys()) + ") values (" + ','.join(['%s' for column_name in data.keys()]) + ")", data.values())
    

    数据应该是字典

    【讨论】:

    • 嗨,我还更新了输入表,为了更清晰,我从每个表中获取元组形式的输出,即 df,data1 是元组形式,例如:df: (('abc@yahoo.com ', abcd'), ('bcd@gmail.com', 'bcda')) data1: (('saha',),)
    • 嗨,还有一件事要补充,我不仅有两个字段,即电子邮件,lname,我需要从 idnum 表中获取大约 11 个字段的许多字段,但对于示例,我创建了这个示例。 ,dats y 可能是字典概念不能应用。
    • 不知何故我觉得错误在于这仅记录了 df 的第一条记录:for x,y in zip(df,data1): cursor.execute("""insert into sql_table1 values (%s, %s,%s)""", (df[0][0], df[0][1],data1[0][0]))
    【解决方案2】:

    试试下面的

    for id, client in data:
        print "==========="
        data = " select email,lname from sample_divya_"+id
        cursor.execute(data)
        conn.commit()
        df = cursor.fetchall()
        # print df
        list_id = "select fname from sample_divya3 where clientname='{}'".format(
            client)
        cursor.execute(list_id)
        conn.commit()
        data1 = cursor.fetchall()
        print df 
        print "------------"
        print data1
        print "~~~~~~~~~~~~~~~~~"
        data2= data1* len(df)
    
        print zip(df,data2)
    
        for x ,y in zip(df,data2):
            dat = """insert into sql_table1  values (%s,%s,%s)""", (x[0], x[1],y[0])
            print dat
    
        # dat = """insert into sql_table1  values (%s,%s,%s)""", (
        #     df[0][0], df[0][1], data1[0][0])
        # cursor.execute("""insert into sql_table1  values (%s,%s,%s)""",
        #                (df[0][0], df[0][1], data1[0][0]))
        # conn.commit()
        # dat_1 = cursor.fetchall()
        # print dat
    conn.commit()
    conn.close()
    

    =============================================

    输出:

    ============

    ('插入 sql_table1 值 (%s,%s,%s)', ('divya@gmail.com', 'sai', 'hasini')) ('插入 sql_table1 值 (%s,%s,%s)', ('sainag@gmail.com', 'nagandla', 'hasini')) ('插入 sql_table1 值 (%s,%s,%s)', ('venu@gmail.com', 'venugopal', 'hasini'))

    ============

    ('插入 sql_table1 值 (%s,%s,%s)', ('pavan@yahoo.com', 'inaganti', 'saha')) ('插入 sql_table1 值 (%s,%s,%s)', ('sahasra@gmail.com', 'sahasra', 'saha'))

    ============

    ('插入 sql_table1 值 (%s,%s,%s)', ('gopal@gmail.com', 'venugopal', 'chinn')) ('插入 sql_table1 值 (%s,%s,%s)', ('vishnu@gmail.com', 'vishnu', 'chinn'))

    ============

    解释:

    在上面的代码中,zip(A,B) 将元组的长度分割为较小的元组对象的长度。所以我通过复制元组来匹配元组的长度。另请注意,此解决方案仅在 sample_divya3 表中的所有 client_num 只有一个 fname 时才有效。

    例子:

    >>> A=((1,2),(2,3))
    >>> B=(('A',))
    >>> zip(A,B)
    [((1, 2), 'A')]
    

    【讨论】:

      【解决方案3】:

      你可以用下一个方法来做

      cursor.execute("insert into sql_table1  values %s", (your_tuple,))
          
      

      重要的是your_tuple 应该是tuple() 而不是list()

      【讨论】:

        【解决方案4】:

        终于明白了:

          for id,filename,name,client in data_1:
                sql="select '{}',email,lname from sample_divya_{}".format(name,id)
                cursor.execute(sql)
                data_2=cursor.fetchall()
                conn.commit()
                data=list(data_2)
                df=pd.DataFrame(data)
        

        试图将所有内容放在一个查询中,从两个表中提取数据。 对于元组插入,我首先将元组转换为列表,然后再转换为数据帧并将其放入 csv

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2022-11-21
          • 2019-01-08
          • 1970-01-01
          • 2016-07-08
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多