Python 在insert上转换数据时出现问题?
所以我想知道是否有人能帮我 我现在有一些课程Python 在insert上转换数据时出现问题?,python,mysql,sqlalchemy,pylons,flask-sqlalchemy,Python,Mysql,Sqlalchemy,Pylons,Flask Sqlalchemy,所以我想知道是否有人能帮我 我现在有一些课程 class Sha1(ColumnClause): pass @compiles(Sha1) def compile_sha1(element, compiler, **kw): return 'PASSWORD("{}")'.format(element.name) 当我使用SQLAlchemy orm插入一列时,我可以将该属性作为Sha1(值)传递,并让它执行它的操作。然而,出于测试目的,我们将模型加载到数据库中,类似于 in
class Sha1(ColumnClause):
pass
@compiles(Sha1)
def compile_sha1(element, compiler, **kw):
return 'PASSWORD("{}")'.format(element.name)
当我使用SQLAlchemy orm插入一列时,我可以将该属性作为Sha1(值)传递,并让它执行它的操作。然而,出于测试目的,我们将模型加载到数据库中,类似于
insert = model.__table__.insert(values)
session.execute(insert)
在sqlalchemy中,有没有一种方法可以覆盖特定模型的sql的生成方式,从而更改从中生成的输出
insert into model (uuid, password) values (:uuid, :password)
像这样使用我的Sha1类
insert into model (uuid, password) values (:uuid, PASSWORD(:password))
有什么想法吗?有一个更新的特性,它允许使用这个名为
bind\u expression()
的函数。如果我理解正确,您可能希望更改Sha1
以接受任意元素,您不再需要显式调用Sha1
,在这种情况下,参数将始终是BindParam
:
from sqlalchemy import *
from sqlalchemy.sql.expression import ColumnElement
from sqlalchemy.ext.compiler import compiles
class Sha1(ColumnElement):
def __init__(self, arg):
self.arg = arg
@compiles(Sha1)
def compile_sha1(element, compiler, **kw):
return 'PASSWORD(%s)' % compiler.process(element.arg, **kw)
class Sha1Type(TypeDecorator):
impl = String
def bind_expression(self, bindvalue):
return Sha1(bindvalue)
m = MetaData()
t = Table('mytable', m,
Column('id', Integer, primary_key=True),
Column('password', Sha1Type)
)
print t.insert()
print t.insert().values(password='some password')