如何用python将csv值导入postgres

2024-04-23 23:16:01 发布

您现在位置:Python中文网/ 问答频道 /正文

我想把csv文件导入postgres数据库,但数据库只显示了列名。我的问题是如何将值导入到我创建的表中? 这是我的密码:

import psycopg2
import csv    
conn = psycopg2.connect(host="127.0.0.1", port="5432", database="postgres", user="postgres", password="******")
print "Opened database successfully"

cur = conn.cursor()     
cur.execute('''create table calls_aapl("Ask" int,"Bid" int,"Change" int,"ContractSymbol" varchar(50),"ImpliedVolatility" decimal(5,4),"LastPrice" money,
                  "LastTradeDate" date,"OpenInterest" int,"PercentChange" decimal(5,4),"Strike" int,"Volume" int);''')
print "Table created successfully"

reader = csv.reader(open('D:/python/Anaconda/AAPL_Data/Calls.csv', 'r'))

for i, row in enumerate(reader):
    print(i, row)
    if i >= 0: continue

    cur.execute('''
        INSERT INTO  calls_aapl(
            "Ask", "Bid", "Change", "ContractSymbol", "ImpliedVolatility", "LastPrice", "LastTradeDate", "OpenInterest", "PercentChange", "Strike", "Volume"
        ) values (%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s), [tuple(row)]'''
    )



conn.commit()
cur.close()

下面的结果显示了值,但在postgres数据库中没有。我试过copy_from()copy_expert()还是没用。你知道吗

Opened database successfully
Table created successfully
(0, ['Ask', 'Bid', 'Change', 'ContractSymbol', 'ImpliedVolatility', 'LastPrice', 'LastTradeDate', 'OpenInterest', 'PercentChange', 'Strike', 'Volume'])
(1, ['27.9', '27.4', '-2.74', 'AAPL180803C00162500', '84.28%', '27.35', '7/30/2018', '2', '-9.11%', '162.5', '2'])
(2, ['23', '22.55', '-1.01', 'AAPL180803C00167500', '76.86%', '22.79', '7/30/2018', '101', '-4.24%', '167.5', '16'])
(3, ['0.01', '0', '0', 'AAPL180803C00225000', '54.69%', '0.01', '7/30/2018', '125', '0.00%', '225', '23'])
(4, ['0.02', '0', '0', 'AAPL180803C00227500', '60.94%', '0.02', '7/27/2018', '0', '0.00%', '227.5', '2'])
(5, ['0.02', '0', '0', 'AAPL180803C00230000', '64.84%', '0.01', '7/27/2018', '0', '0.00%', '230', '81'])

Tags: csv数据库postgresconnchangedatabaseaskint