python - 使用 JayDeBeApi 存储 MySQL 二进制文件(16)
问题描述
我需要使用JayDeBeApibinary(16)
将 UUID 存储在 MySQL 中,它在后台使用 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)的正确方法是什么?
更新:(仍然开放)
所以我找到了使用该功能的解决方案。UNHEX()
问题是该UNHEX()
功能不可移植。我从pymysql
to切换的原因jaydebeapi
是因为我需要使用 H2 进行测试。而 H2 显然没有同样的功能。因此,如果有人有不涉及使用此功能(或任何功能)的不同解决方案,我会更喜欢该解决方案。
所以目前,这个问题仍然悬而未决。
解决方案
注意:不是一个完整的解决方案。我仍在寻找一种不使用函数的方法来执行此操作,因为该函数不可移植。
因此,在Inserting and selection UUIDs as binary(16)的帮助下,我最终使用该UNHEX
函数来取消对实际 UUID 字符串进行十六进制处理。
curs.execute("INSERT INTO `user` (userId,username) VALUES (UNHEX(?), ?)",
(user_id.hex, 'some_user'))
mysql> select * from user;
+------------------------------------+-----------+
| userId | username |
+------------------------------------+-----------+
| 0x7F69F93B0E9F48D0AE8C7D04C78B530F | some_user |
+------------------------------------+-----------+
此外,关于元组的“一个参数”问题,dabblack似乎是正确的。当我尝试使用一个参数时,如果我不添加逗号,它确实可以正常工作。我不是 Python 用户,所以这对我来说是新的。
curs.execute("INSERT INTO `user` (userId) VALUES (UNHEX(?))",
(user_id.hex,))
推荐阅读
- python - How to gather data from a file and execute a Python file using it via right click?
- javascript - 如何解决异步函数中的承诺?
- windows - Docker:Windows 和 Linux 不同的输出。为什么?
- prestashop - Prestashop 添加 css 问题
- excel - 在 Python 中读取 Excel 文件时,为什么数据类型会从 number(int) 更改为 object?
- javascript - 未捕获的类型错误:无法读取数组中未定义的属性“1”
- algorithm - 当某物是大 O 时,是否意味着它正是大 O 的结果?
- java - ConcurrentHashMap 原子操作删除除一个之外的所有条目
- php - 如果记录在一个表中,如何显示名称而不是 id?
- javascript - getElementsByClass java返回null