SQLAlchemy 0.7.8原始字符串查询问题与params

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驱动程序.

我还应该如何为查询提供参数?

say*_*yap 6

通过使用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)

无论如何,我始终坚持使用前者,以一致的方式处理不同驱动程序/数据库中的参数.


Jon*_*nts 1

通过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如果不需要,则可能只是允许)。