#python-3.x #postgresql #csv #database-connection #pg
Вопрос:
Я написал следующий сценарий для загрузки csv-файла в базу данных postgresql.
import psycopg2
import keys
con = psycopg2.connect(
host = keys.keys['host'],
database = keys.keys['database'],
user = keys.keys['user'],
password = keys.keys['password'])
#cursor
cur = con.cursor()
#execute query
#Already created ___#cur.execute("CREATE TABLE accounts (user_id serial PRIMARY KEY, username VARCHAR ( 50 ) UNIQUE NOT NULL, password VARCHAR ( 50 ) NOT NULL, email VARCHAR ( 255 ) UNIQUE NOT NULL, created_on TIMESTAMP NOT NULL, last_login TIMESTAMP)")
cur.execute("""COPY "MyData" FROM 'C:FILESTestData.csv' DELIMITER ',' CSV HEADER;""")
#commit the transcation
con.commit()
#close the cursor
cur.close()
#close the connection
con.close()
Но он вернул следующую ошибку:-
SyntaxError: syntax error at or near ""
LINE 1: COPY "MyData" FROM 'C:FILESTestData.csv' DELIMITER ',' C...
Я не являюсь пользователем root, поэтому я не мог напрямую использовать COPY
команду.
Ответ №1:
Хорошо.
Вы можете использовать psycopg2 copy_from
-> >https://www.psycopg.org/docs/cursor.html#cursor.copy_from
Таким образом, ваш код будет выглядеть примерно так:
import psycopg2
import keys
con = psycopg2.connect(
host = keys.keys['host'],
database = keys.keys['database'],
user = keys.keys['user'],
password = keys.keys['password'])
#cursor
cur = con.cursor()
#execute query
#Already created ___#cur.execute("CREATE TABLE accounts (user_id serial PRIMARY KEY, username VARCHAR ( 50 ) UNIQUE NOT NULL, password VARCHAR ( 50 ) NOT NULL, email VARCHAR ( 255 ) UNIQUE NOT NULL, created_on TIMESTAMP NOT NULL, last_login TIMESTAMP)")
with open('C:\Files\TestData.csv', 'r') as acc:
next(acc) # This will skip the header
cur.copy_from(acc, 'accounts', sep=',')
#commit the transcation
con.commit()
#close the cursor
cur.close()
#close the connection
con.close()
Надеюсь, это ответ на ваш вопрос.