【问题标题】:inserting list values into different rows while keeping the latest values for the other columns将列表值插入不同的行,同时保留其他列的最新值
【发布时间】:2018-08-09 20:25:03
【问题描述】:

我有这样的数据已存储在一个文件中:

name    last_name     class
b        bc           ['1','2','3']

现在我想将它插入到 MySql 中的表中,我希望输出如下所示:(id 是一个自增字段)

id       name    last_name     class
1        b        bc           1
2        b        bc           2
3        b        bc           3

到目前为止,我能够想出这段代码,但它将整个列表存储在一个单元格中:

result=('C://heli.csv') 
count=0
db = MySQLdb.connect("127.0.0.1", "root", "****", "myblog", local_infile=True,use_unicode=True, charset="utf8")
cursor = db.cursor()
cursor.execute("LOAD DATA LOCAL INFILE '%s' INTO TABLE dru FIELDS TERMINATED by '$' LINES TERMINATED BY '\n' (keyword,indication,name,dr_id,synonyms) SET id = NULL" % (result,))
db.commit()
count += 1
db.close()
print(count)

甚至可以像我感兴趣的那样分离出一个列表的值吗?

实际数据如下所示: coronary syndrome$for treatment $bivalirudin$['db00006', 'btd00076', 'expt03302', 'biod00076', 'db02351']$['bivalirudina', 'bivalirudinum', 'hirulog']

【问题讨论】:

  • 数据的结构是什么?它是一个数据框吗?
  • @mad_ 一个 CSV 文件。
  • 那么它是如何转换为列类的列表的呢?你能发布相关的转换或 csv 的样子吗?
  • @mad_ 包含了一些数据!
  • 你是如何在 python 中读取这些数据的?

标签: python mysql sql


【解决方案1】:

我最近在 MySQL 中做了这个。 这绝对不是最好的解决方案,但它会让你到达那里。

如果您可以将原始数据放入 MySQL 表中,则可以使用 SubString 将每个类分开,然后插入到新表中。

例如

select
   name,
   last_name,
   Substring_index(Substring_index(class, ',', 1), ',', -1) as class
from data;

将产生-

name    last_name     class
b        bc           1

完整代码在这里-

http://sqlfiddle.com/#!9/c40a01/1

【讨论】:

  • 谢谢。但是,我有超过 1000 条记录。 @jwood74
  • 记录数有影响吗?我的 select 语句将获取每条记录的第一个“类”。然后第二个 select 语句将获取第二个类(您可以将它们合并在一起)
猜你喜欢
  • 2021-02-23
  • 1970-01-01
  • 1970-01-01
  • 2014-08-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-11-23
  • 1970-01-01
相关资源
最近更新 更多