gpt4 book ai didi

python - 插入时转换数据有问题吗?

转载 作者:行者123 更新时间:2023-11-30 01:32:54 24 4
gpt4 key购买 nike

所以我想知道是否有人可以帮助我。

我现在有一些课

class Sha1(ColumnClause):
pass

@compiles(Sha1)
def compile_sha1(element, compiler, **kw):
return 'PASSWORD("{}")'.format(element.name)

当我使用 SQLAlchemy orm 插入列时,我可以将属性作为 Sha1(value) 传递并让它执行其操作。然而,出于测试目的,我们将模型加载到类似的数据库中

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

关于python - 插入时转换数据有问题吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17241397/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com