我有一個 csv 檔案:
with open(r'apps/patients/management/commands/events.csv') as csvfile:
spamreader = csv.DictReader(csvfile, delimiter=',' ,quotechar=' ')
for row in spamreader:
print(row)
輸出:
{'PATIENT ID': '2', 'PATIENT NAME': 'John', 'EVENT TYPE': 'HR', 'EVENT VALUE': '118', 'EVENT UNIT': 'beats/minute', 'EVENT TIME': '2021-07-09T00:05:00Z'}
{'PATIENT ID': '2', 'PATIENT NAME': 'John', 'EVENT TYPE': 'RR', 'EVENT VALUE': '9', 'EVENT UNIT': 'breaths/minute', 'EVENT TIME': '2021-07-09T00:05:00Z'}
然后我嘗試將檔案資料插入 postgres 資料庫:
with open(r'apps/patients/management/commands/events.csv') as csvfile:
spamreader = csv.DictReader(csvfile, delimiter=',' ,quotechar=' ')
for row in spamreader:
cur.execute(f"""INSERT INTO patients_event (patient_id, event_type_id , event_value ,event_unit, event_time) VALUES
({row['PATIENT ID']},{row['EVENT TYPE']},{row['EVENT VALUE']},
{row['EVENT UNIT']},{row['EVENT TIME']})""")
conn.commit()
錯誤:
psycopg2.errors.SyntaxError: syntax error at or near "T02"
LINE 3: beats/minute,2021-07-07T02:27:00Z)
它適用于 psql 客戶端。
INSERT INTO patients_event (patient_id, event_type_id , event_value ,event_unit, event_time) VALUES ('1','Jane','HR','82','beats/minute','2021-07-07T02:27:00Z')
我認為這是字串字符“T02”的問題,所以我使用:
row['EVENT TIME'].replace('T',' ')
然后錯誤變成了:
psycopg2.errors.SyntaxError: syntax error at or near "02"
LINE 3: beats/minute,2021-07-07 02:27:00Z)
^
然后我想我需要先將它轉換為日期時間:
{datetime.strptime(row['EVENT TIME'], '%Y-%m-%dT%H:%M:%SZ')}
和上一個一樣的錯誤。
然后我做了一些研究:
{row['EVENT TIME']::timestamp}
錯誤:
ValueError: Invalid format specifier
我在這里卡了 2 天,有沒有朋友可以幫忙?
uj5u.com熱心網友回復:
更新:將作業 psql 客戶端輸入與第 3 行錯誤進行比較,您在 cur.execute() 陳述句中的各個值周圍缺少單引號。
原始答案:( 這集中在問題后面的 .Replace('T') 問題上)
2021-07-07T02:27:00Z 采用 ISO 8601 UTC 格式。它包括日期、時間和時區偏移量。顯然,您表的 event_time 列是僅包含日期和時間的時間戳格式。
您需要將帶時區的傳入日期轉換為本地時區格式以省略時區。
看起來您在正確的軌道上將資料轉換為 ::timestamp,但它不會丟棄時區資訊,它希望您進行正確的轉換。
我相信這個 StackOverflow 答案很好地解釋了轉換:PostgreSQL 錯誤從沒有時區的時間戳轉換為有時區的時間戳
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/356597.html
標籤:Python sql PostgreSQL 约会时间 postgresql-9.1
