gpt4 book ai didi

带有自动加载表的 Python-Sqlalchemy 二进制列类型 HEX() 和 UNHEX()

转载 作者:行者123 更新时间:2023-11-29 06:19:32 31 4
gpt4 key购买 nike

我们使用 sqlalchemy,插入和更新工作正常,但现在我们想将 UUID 从 varchar 迁移到 varbinary。如何做到这一点?

现在的代码示例:

engine = create_engine(dburi, echo = True, pool_size=100, pool_recycle=7200)
db_session = scoped_session(sessionmaker(autocommit=True, bind=engine))
metadata = MetaData(engine)
conn = engine.connect()
....
table = Table("table", metadata, autoload=True)
result = db_session.execute(table.insert(), {"uuid":func.UNHEX("AABBCCDD"})

在输出中我看到了

INFO sqlalchemy.engine.base.Engine ('unhex(:unhex_1)',) 和 db - 不是 UNHEX 的结果而是 UNHEX(:UNHEX_1)

我看过Python-Sqlalchemy Binary Column Type HEX() and UNHEX()但我无法对此发表评论,也无法理解如果我们加载结构而不是在类里面生成它会怎样。使用 db_sesson.execute().filter()?以及当我们需要“where uuid=UNHEX(?)”时如何更新?

现在如果我写成 uuid=binascii.unhexlify(uuid),保存到 varbinary(32) - 工作,到 varchar(64) 与表 charset=utf8 工作,到 carchar 与 charset=ascii - 异常

OperationalError: (_mysql_exceptions.OperationalError) (1366, "Incorrect string value: '\\xDB\\xE7,\\x98\\xF9\\x11...' for column 'uuid' at row 1") [SQL: u'INSERT INTO callrec (record_dt, dealer_id, client_id, extension_id, caller_id, destination, file_size, record_url, uuid, record_path, duration) VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s)'] [parameters: (datetime.datetime(2015, 12, 2, 13, 33, 51), u'1', u'12', u'6', u'000*102', u'000*103', 67244, u'', 'P\xdb\xe7,\x98\xf9\x11\xe5\xb8\x9e\xd3\xb2v\xc0\xccZ', '', 2)]

但是手动写入 uuid=UNHEX("AABBCCDD") 已经可以工作了!

最佳答案

我认为你插入错误,试试这个:

db_session.execute(table.insert().values(uuid=func.UNHEX("AABBCCDD")))

或者这个(非常接近你的陈述):

stmt = table.insert().values(uuid=func.unhex(bindparam('hex')))
db_session.execute(stmt, {'hex': 'AABBCCDD'})

此外,如果需要,您可以使用找到的解决方案 here ,为了做到这一点,只需 override some columns :

table = Table("model", metadata, 
Column("uuid", HashColumn(20)),
autoload=True)

并执行以下指令以便在不使用 func.* 的情况下插入:

db_session.execute(table.insert().values(uuid='AABBCCDD'))

关于带有自动加载表的 Python-Sqlalchemy 二进制列类型 HEX() 和 UNHEX(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34039039/

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