【问题标题】:Querying an SQL file into CSV将 SQL 文件查询为 CSV
【发布时间】:2017-11-07 16:38:11
【问题描述】:

我有一个包含以下信息的 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

标签: python mysql sql csv


【解决方案1】:

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

【讨论】:

  • 对,但我有一个指定电子邮件列表,所以我只需要从数据库中提取该电子邮件列表中的人员姓名
  • 这取决于您使用的是什么。并且有几种方法可以解决。除了上面的解决方案,另一种方法是将您的姓名列表加载到临时表并执行连接查询。
【解决方案2】:

像这样:

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

【讨论】:

  • 如何使用从文件中读取的动态名称进行查询:目前有“emailList = text_file.readlines”,所以我想做类似“选择电子邮件,来自电子邮件列表中的电子邮件的人
  • 目前还不完全清楚你想要做什么,但据我了解,你应该在最后一行 df.to_csv 之前修改 Pandas 数据框 df。使用方法heredf.loc[df['email'].isin(emailList)] 写入该列表的子集。或将您的 emailList 写入新数据库表中的新列,并将上面的查询修改为内部连接。希望对您有所帮助,如果解决了请投票或绿色勾号
猜你喜欢
  • 2021-09-12
  • 1970-01-01
  • 2021-11-14
  • 1970-01-01
  • 1970-01-01
  • 2013-07-28
  • 2016-06-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多