使用Python将CSV数据导入postgreSQL时出错

时间:2017-02-20 07:03:44

标签: python postgresql psycopg2

我正在尝试使用Python将我拥有的CSV数据导入到postgreSQL中。当我运行代码时,它显示错误。

import csv
import psycopg2
import time
from datetime import datetime, timedelta

yesterday = datetime.strftime(datetime.now() - timedelta(1), '%Y%m%d')
print yesterday

conn = psycopg2.connect(host="172.19.1.228", database="stat", user="radio",
                        password="abcd1234", port="5432")

tem = "copy e_report FROM '/home/ftpuser/Report/Report_E_RadioStat_' & " \
      "'yesterday' & '.csv' With DELIMITER ',' CSV HEADER;"

cursor = conn.cursor()

cursor.execute(tem)

错误如下所示:

Traceback (most recent call last):
  File "C:\Users\p4532\Desktop\python\python_test.py", line 22, in <module>
    cursor.execute(tem)
ProgrammingError: syntax error at or near "&"
LINE 1: ...t FROM '/home/ftpuser/Report/Report_E_RadioStat_' & 'yesterd...

请建议一种解决此错误的方法。

2 个答案:

答案 0 :(得分:1)

Postgresql中的文本连接运算符是support.getValidationResult().getErrors().forEach(error -> support.getValidationDecorator().applyValidationDecoration(error));

||

https://www.postgresql.org/docs/current/static/functions-string.html#FUNCTIONS-STRING-SQL

改为使用Psycopg '/home/ftpuser/Report/Report_E_RadioStat_' || 'yesterd...

http://initd.org/psycopg/docs/cursor.html#cursor.copy_from

答案 1 :(得分:0)

除了连接运算符之外,请注意copy命令将文件名视为服务器上的路径 。如果要连接到远程数据库,则需要使用命令的from STDIN形式。另外,由于文件中有标题,因此您应使用copy_expert vs copy_from。后者也接受一个文件,但不允许你指定有一个标题。

sql = "copy e_report from stdin with delimiter ',' csv header"
with open(filename, 'r') as instream, conn.cursor() as cursor:
    cursor.copy_expert(sql, instream)