【问题标题】:Executing SQL query with psycopg2使用 psycopg2 执行 SQL 查询
【发布时间】:2018-02-14 15:54:46
【问题描述】:

我正在尝试使用 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

数据非常混乱(请原谅我),但这是代码的 sn-p。我从 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%,星期三);

不确定我在哪里出错了。数据库连接正常。有什么想法吗?

【问题讨论】:

    标签: python postgresql psycopg2


    【解决方案1】:

    首先,您没有使用绑定变量,这是不好的做法,因为这会导致 SQL 注入。你应该做的是:

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

    其中kwargs 是对应于列名和值的键/值对字典。这是正确的做法。

    【讨论】:

      【解决方案2】:

      问题可能与您尝试自行打印错误有关。

      尝试替换: print('pggggg', error)raise

      【讨论】:

      • 是的,这更具体一点。这是我得到的回复:Traceback (most recent call last): File "c:/Python27/Projects/Newsletter/newsletter.py", line 148, in &lt;module&gt; insert_pg(listString) File "c:\Python27\Projects\Newsletter\pg.py", line 24, in insert_pg raise error psycopg2.ProgrammingError: syntax error at or near "," LINE 1: ...4675, 0.14, 35, 7074, 0.86, 60, 59.63, 0.41, 0.69%, Wednesda...
      最近更新 更多