【问题标题】:Inserting a dictionary of tuples into a table将元组字典插入表中
【发布时间】: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


【解决方案1】:

我手动创建了该记录作为列布局的示例。我想遍历每个元组并将每个值插入到具有相应列的记录中。例如:

字典 = {列:(val1,val2,val3)}

对于字典元组中的值: 在列与列匹配的位置插入值

预期结果:

记录1 列:val1

记录2 列:val2

记录 3 列:val3

【讨论】:

    猜你喜欢
    • 2016-08-23
    • 2022-10-18
    • 1970-01-01
    • 2021-07-04
    • 2021-06-27
    • 1970-01-01
    • 1970-01-01
    • 2021-08-16
    • 1970-01-01
    相关资源
    最近更新 更多