Python sqlalchemy with postgres:插入到列带有括号的表中

Python sqlalchemy with postgres:插入到列带有括号的表中,python,postgresql,sqlalchemy,psycopg2,Python,Postgresql,Sqlalchemy,Psycopg2,假设您在postgres中有一个表“foo”,其列名为“col(parens)name”。psql命令 INSERT INTO "foo" ("col (parens) name") VALUES ('bar'); 很好用。但是,如果我尝试使用sqlalchemy(版本0.9.7)执行相同的操作,则生成的python代码将失败: conn = sqlalchemy.create_engine('postgresql://name:password@host:port/database') me

假设您在postgres中有一个表
“foo”
,其列名为
“col(parens)name”
。psql命令

INSERT INTO "foo" ("col (parens) name") VALUES ('bar');
很好用。但是,如果我尝试使用sqlalchemy(版本0.9.7)执行相同的操作,则生成的python代码将失败:

conn = sqlalchemy.create_engine('postgresql://name:password@host:port/database')
meta = sqlalchemy.schema.MetaData()
meta.reflect(bind=conn)
foo = meta.tables['foo']
vals = [{'col (parens) name': 'hi'}, {'col (parens) name': 'bye'}]
conn.execute(foo.insert(values=vals))
这不起作用,导致以下错误:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "sqlalchemy/engine/base.py", line 729, in execute
    return meth(self, multiparams, params)
  File "sqlalchemy/sql/elements.py", line 321, in _execute_on_connection
    return connection._execute_clauseelement(self, multiparams, params)
  File "sqlalchemy/engine/base.py", line 826, in _execute_clauseelement
    compiled_sql, distilled_params
  File "sqlalchemy/engine/base.py", line 957, in _execute_context
    context)
  File "sqlalchemy/engine/base.py", line 1162, in _handle_dbapi_exception
    util.reraise(*exc_info)
  File "sqlalchemy/engine/base.py", line 950, in _execute_context
    context)
  File "sqlalchemy/engine/default.py", line 436, in do_execute
    cursor.execute(statement, parameters)
KeyError: 'col (parens'
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
文件“sqlalchemy/engine/base.py”,第729行,在execute中
返回方法(自身、多线程、参数)
文件“sqlalchemy/sql/elements.py”,第321行,在连接上执行
返回连接。_execute_clauseelement(self、multiparams、params)
文件“sqlalchemy/engine/base.py”,第826行,在“执行”子句元素中
编译的sql,提取的参数
文件“sqlalchemy/engine/base.py”,第957行,在执行上下文中
(上下文)
文件“sqlalchemy/engine/base.py”,第1162行,在\u handle\u dbapi\u异常中
实用程序重新发布(*exc_信息)
文件“sqlalchemy/engine/base.py”,第950行,在执行上下文中
(上下文)
文件“sqlalchemy/engine/default.py”,第436行,在do_execute中
cursor.execute(语句、参数)
KeyError:'col(parens'
显然,绑定db参数的sqlalchemy方法在python字符串插值中遇到了问题。有什么解决方法的建议吗?

Add
paramstyle=“format”
create\u engine
调用。它将更改将查询值插入查询的方式,使其不会在右括号中崩溃

conn = sqlalchemy.create_engine(
    'postgresql://name:password@host:port/database',
     paramstyle="format"
)