【问题标题】:Use a CSV to create a SQL table使用 CSV 创建 SQL 表
【发布时间】:2018-11-05 14:22:53
【问题描述】:

我有一个格式如下的 csv 文件:

+--------------+--------+--------+--------+
| Description  | brand1 | brand2 | brand3 |
+--------------+--------+--------+--------+
| afkjdjfkafj  |      1 |      0 |      0 |
| fhajdfhjafh  |      1 |      0 |      0 |
| afdkjfkajljf |      0 |      1 |      0 |
+--------------+--------+--------+--------+

我想编写一个读取 csv 并在 sql 中创建表的 python 脚本。我希望表格有描述和派生品牌。如果 csv 的品牌名称列中有一个,则说明与该品牌相关联。然后我想创建一个带有描述和相关品牌名称的 sql 表。

表格将是:

+-------------+---------------+
| Description | derived brand |
+-------------+---------------+
| afkjdjfkafj | brand 1       |
+-------------+---------------+

到目前为止,我已经编写了读取 csv 的代码并将描述列成一个列表。

df = pd.read_csv(SOURCE_FILE, delimiter=",")
descriptions = df['descriptions'].tolist()

请提供一些关于如何阅读文件并实现这一点的指导,因为我很迷茫。谢谢!

【问题讨论】:

  • 一定要用python吗? SQL Server 可以使用BULK INSERTOPENROWSET 直接导入这个
  • @scsimon 不,不需要使用 python,但我不知道如何在 sql 中这样做,因为它是一个 csv 文件

标签: python sql-server csv


【解决方案1】:

我刚刚在dba.stackexchange.com 上回答了一个类似的问题,但这里是基础知识

创建您的表格...

create table myStagingTable (Description varchar(64), Brand1 bit, Brand2 bit, Brand3 bit)

然后,如果您的第一行有列标题,则批量插入其中但忽略第一行。

bulk insert myStagingTable
   from 'C:\somefile.csv',
   with( firstrow = 2,
         fieldterminator = ',',
         rowterminator = '\n')

现在您的数据将像在 Excel 文件中一样在表格中。要将其插入到最终表格中,您可以使用 IIFCOALESCE

insert into finalTable
select distinct
    [Description]
    ,DerivedBrand = coalesce(iif(Brand1 = 1,'Brand1',null),iif(Brand2 = 1,'Brand2',null),iif(Brand3 = 1,'Brand3',null))
from myStagingTable

See a DEMO HERE

【讨论】:

  • 谢谢!但是我可以将描述和品牌联系起来吗?因为在决赛桌中只有两列对我来说很重要。我需要能够关联描述并在品牌列中找到 1 的位置,然后将其作为派生品牌添加到最终表中。这是我可以在 SQL 中做的事情吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-10-03
  • 1970-01-01
  • 2014-10-01
  • 2015-10-27
  • 1970-01-01
  • 1970-01-01
  • 2013-10-14
相关资源
最近更新 更多