查询一个SQL文件导入CSV

问题描述:

我有以下信息SQL文件:查询一个SQL文件导入CSV

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, '[email protected]', 'john doe'), 
(2, '[email protected]', 'jane doe'), 
... 
(1000, '[email protected]', 'big cat'); 

我如何可以查询此people.sql文件与文本文件的电子邮件(每行一个)和列表写电子邮件和名称配对到一个新的csv?

+2

您正在使用什么RDBMS? –

+0

我正在使用mySQL – konrad

假设您已经执行上面的文件并将数据放入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中使用这个结果作为查询条件。希望这给你足够的想法。

+0

正确,但我有一个指定的电子邮件列表,所以我只需要该名单的电子邮件列表中的人从数据库 – konrad

+0

拉取它取决于你在用什么。并有多种解决方法。除上述解决方案外,另一种方法是将名称列表加载到临时表并执行联接查询。 – digitake

像这样:

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

我如何查询从文件读取的动态名称: 目前有“emailList = text_file.readlines” 所以我想要做一些像“选择电子邮件,从人的电子邮件地址在哪里emailList – konrad

+0

这并不完全清楚你想要什么但据我了解,你应该在最后一行df.to_csv之前修改Pandas dataframe df。使用方法[here](https://*.com/questions/17071871/select-rows-from-a-dataframe - 基于值的在列中的熊猫#17071908)编写'df.loc [df ['email']。isin(emailList)]'子集该列表。或者将您的emailList写入一个在新的数据库表中添加新列,并修改上面的查询以便作为内部联接。如果希望它有帮助,请投票或绿色勾选解决它 – cardamom