我使用一个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中所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)