Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/magento/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在sqlalchemy和postgresql中使用伪列插入_Postgresql_Insert_Sqlalchemy - Fatal编程技术网

在sqlalchemy和postgresql中使用伪列插入

在sqlalchemy和postgresql中使用伪列插入,postgresql,insert,sqlalchemy,Postgresql,Insert,Sqlalchemy,我正在尝试使用SQL表达式语言对SQLAlchemy 0.9和PostgreSQL 9.1进行插入。我是sqlalchemy新手,由于种种原因,目前无法使用ORM。我的原始解决方案使用一个文本查询,该查询需要在INSERT FROM SELECT中引用一个伪列 我的问题是:如何将它从文本语句转换为表达式 任何帮助都将不胜感激 这是我的原始查询,简化(其他列已删除): 我现在是这样运行的: with engine.begin() as conn: result = conn.execute(s

我正在尝试使用SQL表达式语言对SQLAlchemy 0.9和PostgreSQL 9.1进行插入。我是sqlalchemy新手,由于种种原因,目前无法使用ORM。我的原始解决方案使用一个文本查询,该查询需要在INSERT FROM SELECT中引用一个伪列

我的问题是:如何将它从文本语句转换为表达式

任何帮助都将不胜感激

这是我的原始查询,简化(其他列已删除):

我现在是这样运行的:

with engine.begin() as conn:
  result = conn.execute(statement)
这是可行的,我需要什么,但我没有得到“结果”内的反馈。我需要知道插入了多少行(如果有的话),但即使插入了行,值或“result”也始终为空。这就是我想转换它的原因

这是我到目前为止所做的,但我不知道如何将insert语句组合在一起

with engine.begin() as conn:
  pt = sqlalchemy.Table('permanent_table',metadata,autoload=True,autoload_with=engine, schema='test')
  tmp = Table('tmp',metadata,Column('event_id', String(100)))
  metadata.create_all()
  copy_statement = """COPY tmp FROM '%(csv_file)s' WITH CSV HEADER QUOTE'''';""" % {'csv_file':somefile}
  s=select([tmp])
  result = conn.execute(s).fetchone()
  print result
通过以上内容,我可以验证我是否正在将内容插入“tmp”:

result (u'113938227820000400')    
我实际上如何构造insert-tho?这失败了:

insert_statement = pt.insert().from_select(
   ['source_system','event_id'],
   tmp.select(['%(src)s', tmp]).join( pt,
      pt.c.event_id==tmp.c.event_id).where(pt.c.event_id==None)
result=conn.execute(insert_statement)

提前谢谢

行数不能通过
fetch
命令访问。这些都是为了得到结果集


根据psycopg2文档使用。

不要使用多语句。分别运行每个语句。对不起@CraigRinger,你是说将原始语句分解为多个执行?请你澄清一下好吗?是的,用一个单独的
execute
运行每个语句。否则,PostgreSQL不知道要从哪个结果集或行数中获取结果集或行数。我将其分解为单独的语句,但在执行insert时,仍然无法获取插入的行数。当我运行这个:conn.execute(insert_语句).fetchall()时,我得到ResourceClosedError:这个结果对象不返回行。它已自动关闭:(新的insert_语句只是“insert INTO permanent_table(source_system,event_id)SELECT”“(src)s',tmp.event_id从tmp LEFT JOIN permanent_table pt ON(tmp.event_id=pt.event_id,pt.source_system='(src)),其中pt.event_id为NULL;”按建议自行执行。
insert_statement = pt.insert().from_select(
   ['source_system','event_id'],
   tmp.select(['%(src)s', tmp]).join( pt,
      pt.c.event_id==tmp.c.event_id).where(pt.c.event_id==None)
result=conn.execute(insert_statement)