我有一个包含以下信息的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?
答案 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 ','
上面将根据给定列表生成映射。但你的第二个需求是从文本文件中获取该列表。一种方法是使用sed
和tr
实用程序将“每行一个名称”转换为“逗号名称列表”。
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")