【问题标题】:How to insert sql a row which contains 2 foreign keys?如何在包含 2 个外键的行中插入 sql?
【发布时间】:2021-12-23 08:30:33
【问题描述】:

我有 3 张桌子:

event,event_type,patient

event_type 和 patient 都是事件表的外键。

event fields:id, event_type(foreign key),event_unit, event_value,event_time, patient(foreign key)

event_type fields: id, name

patient fields : patient_id ,patient_name

我有一个 csv 文件 events.csv:

import csv
with open(r'/Users/williaml/Downloads/events.csv') as csvfile: 
    spamreader = csv.reader(csvfile, delimiter=',' ,quotechar=' ')
    for row in spamreader:
        print(row)

输出是:

['"PATIENT ID', 'PATIENT NAME', 'EVENT TYPE', 'EVENT VALUE', 'EVENT UNIT', 'EVENT TIME"']
['"1', 'Jane', 'HR', '82', 'beats/minute', '2021-07-07T02:27:00Z"']
['"1', 'Jane', 'RR', '5', 'breaths/minute', '2021-07-07T02:27:00Z"']
['"2', 'John', 'HR', '83', 'beats/minute', '2021-07-07T02:27:00Z"']
['"2', 'John', 'RR', '14', 'breaths/minute', '2021-07-07T02:27:00Z"']
['"1', 'Jane', 'HR', '88', 'beats/minute', '2021-07-07T02:28:00Z"']
['"1', 'Jane', 'RR', '20', 'breaths/minute', '2021-07-07T02:28:00Z"']
['"2', 'John', 'HR', '115', 'beats/minute', '2021-07-07T02:28:00Z"']
['"2', 'John', 'RR', '5', 'breaths/minute', '2021-07-07T02:28:00Z"']

现在我想将这些行插入数据库:

import psycopg2
conn = psycopg2.connect(host='localhost', dbname='patientdb',user='username',password='password',port='')
cur = conn.cursor()

    import csv
with open(r'/Users/williaml/Downloads/events.csv') as csvfile: 
    spamreader = csv.reader(csvfile, delimiter=',' ,quotechar=' ')
    for row in spamreader:
            INSERT INTO event (patient_id, patient_name, event_type, event_value ,event_unit, event_time) VALUES ( row[0],row[1],row[3],row[4],row[5])

收到错误:

psycopg2.errors.UndefinedColumn: column "patient_name" of relation "event" does not exist

我认为原因是我不能直接插入整行,因为值属于不同的表。

有朋友可以帮忙吗?

【问题讨论】:

  • 将适当的值放入适当的表中。

标签: python sql database postgresql foreign-keys


【解决方案1】:

假设event_typepatient 已经有正确的信息,那么您可以在没有patient_name 的情况下使用INSERT(正如patient_id 所涵盖的那样)并将patient_id 值输入到patient 字段中event。如果您使用csv 中的csv.DictReader,这会更容易,然后您可以执行以下操作:

INSERT INTO 
    event (patient, event_type, event_value ,event_unit, event_time) VALUES 
  (row['PATIENT ID'],row['EVENT TYPE'],row['EVENT VALUE'],
   row['EVENT UNIT'],row['EVENT TIME'])

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-31
  • 2021-07-10
  • 1970-01-01
  • 2021-01-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多