【发布时间】:2021-11-05 18:20:49
【问题描述】:
我需要在 MySQL 中使用 JayDeBeApi 将 UUID 存储为 binary(16),它在后台使用 JDBC。当我尝试使用 Python 字节保存数据时,数据未正确转换/或存储。
当使用一个参数时
curs.execute('INSERT INTO `user` (userId) VALUES (?)',
(uuid.uuid4().bytes))
出现以下错误:
参数索引超出范围(2>参数个数,即1)。
当使用两个参数时
curs.execute('INSERT INTO `user` (userId,username) VALUES (?, ?)',
(uuid.uuid4().bytes, 'some_user'))
没有错误,但数据没有正确存储
mysql> select * from user;
+------------------------------------+-----------+
| userId | username |
+------------------------------------+-----------+
| 0x00000000000000000000000000000000 | some_user |
+------------------------------------+-----------+
当我使用pymysql 时,使用uuid.uuid4().bytes 效果很好。那么使用 JayDeBeApi 保存字节(或只是 UUID)的正确方法是什么?
Here is a reproducible example.
更新:(仍然开放)
所以我使用UNHEX() 函数找到了solution。问题是 UNHEX() 函数不可移植。我从pymysql切换到jaydebeapi的原因是因为我需要使用H2进行测试。而 H2 显然没有同样的功能。因此,如果有人有不涉及使用此功能(或根本不涉及)的不同解决方案,我会更喜欢该解决方案。
所以目前,这个问题仍然悬而未决。
【问题讨论】:
-
(uuid.uuid4().bytes), )需要逗号作为元组可能是一个参数问题。 jdbc连接我不知道。 -
@danblack 我认为这不是问题所在。只有一个参数,我可以省略元组并只传递单个值。当我这样做时,我会收到相同的错误消息。
-
@danblack 我认为你对这部分问题实际上是正确的。
标签: python mysql jdbc uuid jaydebeapi