python将二进制数据插入并检索到mysql中
发布时间:2020-12-16 23:42:52 所属栏目:Python 来源:网络整理
导读:我正在使用 MySQLdb包与 MySQL进行交互.我无法获得正确的类型转换. 我使用一个16字节的二进制uuid作为表的主键,并有一个mediumblob保存zlib压缩的json信息. 我正在使用以下架构: CREATE TABLE repositories ( added_id int auto_increment not null,id bina
我正在使用
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).hex added_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 binascii import MySQLdb import uuid conn = 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 'x96xc5xa4xc3Z+Lxf0x86x1ex05xebtxf7xd5' selecting 'x96xc5xa4xc3Z+Lxf0x86x1ex05xebtxf7xd5' 1 96c5a4c35a2b4cf0861e05eb74f75cd5 % python qu.py inserting 'xacxc9,jnxb2O@xbbxa27hxcd<Bxda' selecting 'xacxc9,jnxb2O@xbbxa27hxcd<Bxda' 2 acc92c6a6eb24f40bba23768cd3c42da (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |