python将二进制数据插入并检索到mysql中

python将二进制数据插入并检索到mysql中,第1张

概述我正在使用 MySQLdb包与 MySQL进行交互.我无法获得正确的类型转换. 我使用一个16字节的二进制uuid作为表的主键,并有一个mediumblob保存zlib压缩的json信息. 我正在使用以下架构: CREATE TABLE repositories ( added_id int auto_increment not null, id binary(16) not nu 我正在使用 MySQLdb包与 MySQL进行交互.我无法获得正确的类型转换.

我使用一个16字节的二进制uuID作为表的主键,并有一个mediumblob保存zlib压缩的Json信息.

我正在使用以下架构:

CREATE table repositorIEs (    added_ID int auto_increment not null,ID binary(16) not null,data mediumblob not null,create_date int not null,update_date int not null,PRIMARY KEY (added_ID),UNIQUE(ID)) DEFAulT CHARSET=utf8 ColLATE=utf8_unicode_ci ENGINE=InnoDB;

然后我使用以下代码在表中创建一个新行:

data = zlib.compress(Json.dumps({'hello':'how are you :D'})row_ID = uuID.uuID(4).hexadded_ID = cursor.execute('    INSERT INTO repositorIEs (ID,data,create_date,update_date)     VALUES (%s,%s,%s)',binascii.a2b_hex(row_ID),time.time(),time.time())

然后检索数据我使用类似的查询:

query = cursor.execute('SELECT added_ID,ID,update_date ' \    'FROM repositorIEs WHERE ID = %s',binascii.a2b_hex(row_ID))

然后查询返回一个空结果.

任何帮助,将不胜感激.另外,最好将unix纪元日期存储为整数还是TIMESTAMP?

注意:我没有插入数据的问题,只是试图从数据库中检索它.当我通过MysqLclIEnt检查时,该行存在.

非常感谢!@

解决方法 一个提示:您应该能够调用uuID.uuID4().bytes来获取原始数据
字节.至于时间戳,如果你想执行时间/日期 *** 作
在sql中,处理真正的TIMESTAMP类型通常更容易.

我创建了一个测试表来尝试重现您所看到的内容:

CREATE table xyz (    added_ID INT auto_INCREMENT NOT NulL,ID BINARY(16) NOT NulL,UNIQUE (ID)) DEFAulT CHARSET=utf8 ColLATE=utf8_unicode_ci ENGINE=InnoDB;

我的脚本能够使用二进制字段作为插入和查询行
关键没有问题.也许你错误地获取/迭代了
光标返回的结果?

import binasciiimport MysqLdbimport uuIDconn = MysqLdb.connect(host='localhost')key = uuID.uuID4()print 'inserting',repr(key.bytes)r = conn.cursor()r.execute('INSERT INTO xyz (ID) VALUES (%s)',key.bytes)conn.commit()print 'selecting',repr(key.bytes)r.execute('SELECT added_ID,ID FROM xyz WHERE ID = %s',key.bytes)for row in r.fetchall():    print row[0],binascii.b2a_hex(row[1])

输出:

% python qu.py    inserting '\x96\xc5\xa4\xc3Z+L\xf0\x86\x1e\x05\xebt\xf7\\xd5'selecting '\x96\xc5\xa4\xc3Z+L\xf0\x86\x1e\x05\xebt\xf7\\xd5'1 96c5a4c35a2b4cf0861e05eb74f75cd5% python qu.pyinserting '\xac\xc9,jn\xb2O@\xbb\xa27h\xcd<B\xda'selecting '\xac\xc9,jn\xb2O@\xbb\xa27h\xcd<B\xda'2 acc92c6a6eb24f40bba23768cd3c42da
总结

以上是内存溢出为你收集整理的python将二进制数据插入并检索到mysql中全部内容,希望文章能够帮你解决python将二进制数据插入并检索到mysql中所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1207558.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-04
下一篇 2022-06-04

发表评论

登录后才能评论

评论列表(0条)

保存