簡體   English   中英

使用psycopg2執行SQL查詢

[英]Executing SQL query with psycopg2

我正在嘗試使用psycopg2將列表傳遞到postgres表中。 我一直遇到一個例外:

  File "c:/Python27/Projects/Newsletter/newsletter.py", line 148, in <module>
insert_pg(listString)
  File "c:\Python27\Projects\Newsletter\pg.py", line 23, in insert_pg
    print('pggggg', error)
IOError: [Errno 0] Error

數據非常混亂(請原諒我),但這是代碼段。 我從newsletter.py運行它:

if __name__ == '__main__':
dataList = [today, str(int(round(float(str(spxprice.replace(',', '')))))), str(int(round(float(spxchg)))), str(int(round(float(spxpchg)))), str(int(round(float(str(dowprice.replace(',', '')))))), dowpchg, str(int(round(float(dowchg)))), str(int(round(float(str(ndxprice.replace(',', '')))))), ndxpchg, str(int(round(float(ndxchg)))), ''.join(oilPrice[4]), ''.join(getOilChg), ''.join(getOilPct), dayName]

listString = ', '.join(dataList)

insert_pg(listString)

這是pg.py,我從以下位置導入insert_pg:

import psycopg2
from config import config
import sys


def insert_pg(thedata):
    sql = ("""insert into prices values (%s);""" % thedata)

    conn = None
    try:
        # read database configuration
        params = config()
        # connect to the PostgreSQL database
        conn = psycopg2.connect(**params)
        # create a new cursor
        cur = conn.cursor()
        # execute the INSERT statement
        cur.execute(sql)
        conn.commit()
        cur.close()
        print 'Success.'
    except (Exception, psycopg2.DatabaseError) as error:
        print('pggggg', error)
    finally:
        if conn is not None:
            conn.close()

我打印時的sql輸出:

插入價格值(02/14 / 2018、2675、12、0、24698、0.23、58、7074、0.86、60、59.09,-0.06,-0.10%,星期三);

不知道我在哪里錯了。 數據庫連接正常。 有任何想法嗎?

首先,您沒有使用綁定變量,這是一種不好的做法,因為這可能導致SQL注入。 您應該做的是這樣的:

cur.execute('INSERT INTO PRICES(col1, col2, ...) VALUES(%(val1)s, %(val2)s, ...)', kwargs)

其中kwargs是對應於列名和值的鍵/值對的字典。 這是正確的方法。

該問題可能與您嘗試自行打印錯誤有關。

嘗試更換: print('pggggg', error)raise

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM