无法弄清楚为什么查询失败

时间:2015-12-14 00:23:44

标签: python postgresql psycopg2

我正在尝试迁移一些代码,这些代码将数据插入到数据库中,以便向前推进w postgres。下面的代码/查询失败了,在查看了数组的大小后,它似乎应该正常工作。

关于为什么失败的任何输入都会很棒。

我的SQL看起来像:

sql = "insert into postgres.options.options (delta,gamma,rho,theta,\"impVol\",value,vega,date,ticker,\"callPut\",\"Chg\",\"maturity\",\"Symbol\",\"Strike\",\"Implied\",\"Last\",\"Vol\",\"Ask\",\"Bid\") values " \
      "(%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s)"

我的数据如下所示:

data=[0.782154229511169, 0.026557152004256603, 0.005658995525391192, -0.4087164010990902, 136.71875, 8.94733166658628, 0.02387435675989819, 20150706, u'SVXY', u'C', -2.9, 20150710, u'SVXY150710C00070000', 70.0, 0.0, 7.9, 5.0, 9.2, 8.7]

我的python代码读作:

       cur.execute(sql,data)
        conn.commit()

我在桌面上的create语句如下:

CREATE TABLE options.options
(
  delta double precision,
  gamma double precision,
  rho double precision,
  theta double precision,
  "impVol" double precision,
  value double precision,
  vega double precision,
  _id text,
  date bigint,
  ticker text,
  "callPut" text,
  "Chg" double precision,
  maturity integer,
  "Symbol" text,
  "Strike" double precision,
  "Implied" double precision,
  "Last" double precision,
  "Vol" double precision,
  "Ask" double precision,
  "Bid" double precision
)

我的错误是:

Traceback (most recent call last):
  File "C:/Users/jasonmellone/PycharmProjects/price_options_multithread/migrate_error_options.py", line 41, in <module>
    cur.execute(sql,data)
InternalError: current transaction is aborted, commands ignored until end of transaction block

3 个答案:

答案 0 :(得分:1)

insert语句中有错误。 postgres.options.options不是有效的表,因为PostgreSql认为,您的意思是对另一个数据库的引用。改变这个:

insert into postgres.options.options...

到此:

insert into options.options...

答案 1 :(得分:0)

您已在options架构中创建了一个表options。而您使用postgres架构插入。

更改您的插入内容:

sql = "insert into options.options  ..."

答案 2 :(得分:0)

在python中构建我的查询字符串,并使用SQLAlchemy我能够使用以下逻辑插入:

def get_engine():
    engine = create_engine('postgresql+psycopg2://user:password@localhost/postgres')
    return engine

db = get_engine()
connection = db.connect()
connection.execute(sql)