【问题标题】:Simple query to database - condition comes from csv对数据库的简单查询 - 条件来自 csv
【发布时间】:2016-05-29 19:39:39
【问题描述】:

我一直在想一件事。是否可以查询数据库,以便在 csv 文件中给出“where”子句条件?

假设我有数据库,并且在其中有这样的表(名称为 some_table):

id         company_id   created_at
0001c73d   12345        2016-1-1
rewrewrf   45678        2016-2-1
0001c73d   57986        2016-3-1
vcxcv34d   21346        2016-4-1
23215fsf   47896        2016-6-1

我的 some.csv 看起来像这样:

error_id;company_id 
32rgfvx4;12345     
fds44322;45678     
fdsf46hh;57986    
989jh2f4;21346   
f43452fg;47896     

所以查询可能是这样的:

select company_id, created_at
from some_table
where company_id IN ('some.csv:column2')

明白了吗?

这可以用 python 或者直接用一些 SQL 程序(插件/脚本..)或其他东西来完成吗?有任何想法吗?

【问题讨论】:

  • 很确定这可以通过 PowerShell 完成
  • SQL Server 有 OPENROWSET 我认为可以用于类似的事情,但我不相信 MySQL 有一个等价物。正如@dfundako 指出的那样,Powershell 可以做到(取决于 CSV 的大小和您的方法)。我认为 Python 也可以。
  • 您可以将 CSV 文件加载到临时表中并使用该表进行过滤。但是为什么不直接用 python 解析 CSV 文件呢?
  • 不太了解 Powershell 和 Python 新手。但不应该那么难,谢谢你的提示。打算进行更多调查。

标签: python mysql sql csv


【解决方案1】:

LOAD DATA 的 SQL 解决方案:

创建一个与 CSV 数据匹配的临时表:

CREATE TEMPORARY TABLE tmp_errors (
    error_id   VARCHAR(50) NULL DEFAULT NULL,
    company_id VARCHAR(50) NULL DEFAULT NULL,
    INDEX company_id (company_id)
);

将数据加载到临时表中:

LOAD DATA INFILE '/full/path/to/csv/errors.csv'
INTO TABLE tmp_errors
FIELDS TERMINATED BY ';'
IGNORE 1 LINES;

使用临时表过滤您的选择:

select company_id, created_at
from some_table
where company_id IN (select company_id from tmp_errors);

或者

select t.company_id, t.created_at, e.error_id
from some_table t
join tmp_errors e using(company_id);

【讨论】:

  • 嗯.. 所以我可以把这一切都放在 python 脚本中并运行它?
  • 我不知道 python :-) 这是一个纯 MySQL 解决方案。您可以从 mysql-console、HeidiSQL 和 Workbench 等工具或 PhpMyAdmin 等网络界面执行查询。
  • 是的,我知道此时获得了 Sequel Pro。嗯,我可以尝试通过 python 运行它。还有一位了解 Ruby 的朋友,他说这应该是花生。如果我们只是让 SSL 隧道工作。
  • 如果一个人对数据库有写入权限,这将起作用,但由于我只有读取权限,这并不能解决我的问题。
  • @Taapsa,你只需要CREATE TEMPORARY TABLES privilege
猜你喜欢
  • 1970-01-01
  • 2012-09-19
  • 1970-01-01
  • 2017-08-16
  • 1970-01-01
  • 1970-01-01
  • 2012-11-15
  • 2016-06-06
  • 1970-01-01
相关资源
最近更新 更多