【发布时间】:2019-07-30 12:10:47
【问题描述】:
我正在尝试插入一个字典,该字典的键对应于 Postgres 数据库,其值(值是元组)应插入到表中该列的行中。
这是我的代码以及 Postgres 表:
samples_data_dict = {'replicate_group_id': replicate_group_id_values_tuple,
'sample_id': sample_id_values_tuple,
'chip_type': chip_type_values_tuple,
'dataset_id': dataset_id_values_tuple}
for k, v in samples_data_dict.items():
# insert_statement = 'insert into samples (%s) values %s'
# cursor.execute(insert_statement, (eval(k), tuple(v)))
cursor.execute("INSERT INTO samples (%s) VALUES (%s);", (eval(k), v))
conn.commit()
Postgres 表记录,格式为 \x:
-[ RECORD 1 ]------------+--
id | 1
sample_id | 1
chip_type |
dataset_id |
sample_name_long |
sample_name |
replicate_group_id |
media |
generic_sample_type |
sample_type |
cell_line |
facs_profile |
reprogramming_method |
tissue_organism_part |
sample_description |
age |
final_cell_type |
sex |
organism |
developmental_stage |
labelling |
genetic_modification |
parental_cell_type |
sample_type_long |
这是我收到的错误:
Traceback (most recent call last):
File "transformer.py", line 172, in <module>
main()
File "transformer.py", line 141, in main
cursor.execute("INSERT INTO samples (%s) VALUES (%s);", (eval(k), v))
File "<string>", line 1, in <module>
NameError: name 'replicate_group_id' is not defined
我正在使用 'eval(k)' 来获取字典中不带引号 '' 的键的值,否则我会收到来自 Postgres 的语法错误。但是删除引号(我认为)意味着我的字典中不再识别该键。我该如何解决这个问题?
【问题讨论】:
-
那么,这些值是元组,而不仅仅是一项?您希望最后有多少行?是否所有值元组都具有相同数量的项目?
-
是的,所有值都是元组,每个都有很多行(1000 行)。所有值都有不同数量的项目。这些元组是根据数据框创建的,由 .tsv 文件构建。
-
那么每一行是否只有 id 而另一列是非空的?您显示的一条记录只有一个值,那么您是否还计划迭代元组中的每个值?
标签: python-3.x postgresql