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')