Mar*_*icz 4 python sqlalchemy pyramid
我正在使用SQLAlchemy和Pyramid应用程序,我需要使用'format'paramstyle.例如:
DBSession.execute('SELECT id FROM users WHERE email = %s;', email)
Run Code Online (Sandbox Code Playgroud)
这在理论上应该可行,但我得到了sqla错误:
('SQL Error!', AttributeError("'list' object has no attribute 'keys'",))
Run Code Online (Sandbox Code Playgroud)
即使email是字符串而不是列表.我尝试使用元组,但我得到相同的错误(但不是"列表",它说"元组").
我pg8000用作DB驱动程序.
我还应该如何为查询提供参数?
通过使用execute会话的方法,参数处理由SQLAlchemy完成,因此您需要以下内容:
DBSession.execute('SELECT id FROM users WHERE email = :email;', {'email': email})
Run Code Online (Sandbox Code Playgroud)
但是,如果您使用execute引擎的方法,那么参数处理由底层的DB-API完成,在这种情况下是pg8000,例如
DBSession.bind.execute('SELECT id FROM users WHERE email = %s;', email)
Run Code Online (Sandbox Code Playgroud)
无论如何,我始终坚持使用前者,以一致的方式处理不同驱动程序/数据库中的参数.
通过http://pybrary.net/pg8000/dbapi.html#pg8000.dbapi.CursorWrapper.execute阅读它看起来pg8000.dbapi.paramstyle设置为named因此它期望一个如下所示的映射:
DBSession.execute('SELECT id FROM users WHERE email = %(email)s', {'email': email})
Run Code Online (Sandbox Code Playgroud)
看来您想要设置paramstyle看起来pyformat最灵活的选项 - 允许序列或映射(或者format如果不需要,则可能只是允许)。
| 归档时间: |
|
| 查看次数: |
2141 次 |
| 最近记录: |