Python 将SQL文件查询为CSV

Python 将SQL文件查询为CSV,python,mysql,sql,csv,Python,Mysql,Sql,Csv,我有一个包含以下信息的SQL文件: CREATE TABLE 'people' ( 'id' int(11) UNSIGNED NOT NULL, 'email' varchar(255) DEFAULT NULL, 'name' varchar(255) DEFAULT ) ENGINE=InnoDB DEFAULT CHARSET=utf8; INSERT INTO 'people' ('id', 'email', 'name') VALUES (1, 'a@gmail.com', 'jo

我有一个包含以下信息的SQL文件:

CREATE TABLE 'people' (
'id' int(11) UNSIGNED NOT NULL,
'email' varchar(255) DEFAULT NULL,
'name' varchar(255) DEFAULT
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

INSERT INTO 'people' ('id', 'email', 'name') VALUES
(1, 'a@gmail.com', 'john doe'),
(2, 'b@gmail.com', 'jane doe'),
...
(1000, 'x@gmail.com', 'big cat');

如何使用文本文件中的电子邮件列表(每行一封)查询people.sql文件,并将电子邮件和姓名配对写入新的csv?

假设您已执行上述文件,并将数据放入mySQL数据库

您可以使用select命令写入csv文件

SELECT email, name FROM people INTO OUTFILE 'yourfile.csv' FIELDS 
TERMINATED BY ','
在您更新的注释中,您只需要将人名从文本文件映射到SQL命令来执行查询。如果你把问题分解,它将变成两项任务。首先是从给定列表中选择名称,可通过以下方式完成:

SELECT email, name FROM people WHERE name IN ('john', 'alice', 'bob') INTO 
OUTFILE 'yourfile.csv' FIELDS TERMINATED BY ','
上面将根据给定列表生成一个映射。但您的第二个需要是从文本文件中获取该列表。一种方法是使用
sed
tr
实用程序将“每行一个名称”转换为“带逗号的名称列表”

cat your-name-list.txt | sed -e "s/\([a-zA-Z0-9\=\.\-]*\)/'\1'/g" | tr "\n" ","

我不知道你的环境是什么。但基本上,您希望在上面的SQL中使用此操作的结果作为查询条件。希望这能给您提供足够的想法。

假设您已经执行了上面的文件,并将数据放入mySQL数据库

您可以使用select命令写入csv文件

SELECT email, name FROM people INTO OUTFILE 'yourfile.csv' FIELDS 
TERMINATED BY ','
在您更新的注释中,您只需要将人名从文本文件映射到SQL命令来执行查询。如果你把问题分解,它将变成两项任务。首先是从给定列表中选择名称,可通过以下方式完成:

SELECT email, name FROM people WHERE name IN ('john', 'alice', 'bob') INTO 
OUTFILE 'yourfile.csv' FIELDS TERMINATED BY ','
上面将根据给定列表生成一个映射。但您的第二个需要是从文本文件中获取该列表。一种方法是使用
sed
tr
实用程序将“每行一个名称”转换为“带逗号的名称列表”

cat your-name-list.txt | sed -e "s/\([a-zA-Z0-9\=\.\-]*\)/'\1'/g" | tr "\n" ","
我不知道你的环境是什么。但基本上,您希望在上面的SQL中使用此操作的结果作为查询条件。希望这能给你足够的想法。

像这样:

import pymysql.cursors
import pandas as pd

connection = pymysql.connect(host='DB_IP_or_localhost',
                             user='myUser',
                             password='myPassword',
                             db='InnoDB',
                             cursorclass=pymysql.cursors.DictCursor)

with connection.cursor() as cursor:
    sql = "SELECT email, name FROM people"
    df = pd.read_sql(sql, connection)
connection.close()

df.to_csv("people.csv", encoding="utf-8")
像这样:

import pymysql.cursors
import pandas as pd

connection = pymysql.connect(host='DB_IP_or_localhost',
                             user='myUser',
                             password='myPassword',
                             db='InnoDB',
                             cursorclass=pymysql.cursors.DictCursor)

with connection.cursor() as cursor:
    sql = "SELECT email, name FROM people"
    df = pd.read_sql(sql, connection)
connection.close()

df.to_csv("people.csv", encoding="utf-8")

你在用什么关系数据库?我在用mySQLright,你在用什么关系数据库?我在用mySQLright,但我有一个指定的电子邮件列表,所以我只需要从数据库中提取电子邮件列表中的人的姓名,这取决于你在用什么。有几种方法可以解决这个问题。除了上述解决方案外,另一种方法是将您的姓名列表加载到临时表并执行联接查询。对,但我有一个指定电子邮件列表,因此我只需要从数据库中提取该电子邮件列表中的人员姓名,这取决于您使用的是什么。有几种方法可以解决这个问题。除了上述解决方案之外,另一种方法是将您的姓名列表加载到临时表并执行联接查询。如何使用从文件读取的动态姓名进行查询:当前有“emailList=text\u file.readlines”,因此我想执行以下操作“选择email,从EmailList中电子邮件所在的人员中选择email不完全清楚您想做什么,但据我所知,您应该在最后一行df.to_csv之前修改Pandas数据帧df。使用该方法编写
df.loc[df['email'].isin(emailList)]
以将该列表子集。或者将emailList写入新数据库表中的新列,并将上面的查询修改为该列的内部联接。如果有帮助,请投赞成票,如果解决了问题,请打绿色勾。如何使用从文件读取的动态名称进行查询:当前有“emailList=text\u file.readlines”,因此我想执行以下操作“选择email,从EmailList中电子邮件所在的人员中选择email不完全清楚您想做什么,但据我所知,您应该在最后一行df.to_csv之前修改Pandas数据帧df。使用该方法编写
df.loc[df['email'].isin(emailList)]
以将该列表子集。或者将emailList写入新数据库表中的新列,并将上面的查询修改为该列的内部联接。希望它有帮助,如果是这样,请投票赞成或绿色勾选,如果它解决了它