将SQL文件查询为CSV

时间:2017-06-06 15:14:03

标签: 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', 'john doe'),
(2, 'b@gmail.com', 'jane doe'),
...
(1000, 'x@gmail.com', 'big cat');

如何在文本文件中查询带有电子邮件列表(每行一个)的people.sql文件,并将电子邮件和名称配对写入新的csv?

2 个答案:

答案 0 :(得分:0)

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

您可以使用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 ','

上面将根据给定列表生成映射。但你的第二个需求是从文本文件中获取该列表。一种方法是使用sedtr实用程序将“每行一个名称”转换为“逗号名称列表”。

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

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

答案 1 :(得分:0)

像这样:

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")