Python 是否可以使用load DATA INFILE将BLOB加载到MySQL中?
我曾尝试使用一些长字符串终止字段/行,但每次都有一些条目损坏。Python 是否可以使用load DATA INFILE将BLOB加载到MySQL中?,python,mysql,numpy,blob,load-data-infile,Python,Mysql,Numpy,Blob,Load Data Infile,我曾尝试使用一些长字符串终止字段/行,但每次都有一些条目损坏。 BLOB是保存为uint32(numpy.array(intlist,dtype='uint32').tostring())的整数的numpy.array。 卸载时(numpy.fromstring(blob,dtype='uint32')),numpy报告字符串大小必须是元素大小的倍数 mysql -p somedb -e "LOAD DATA LOCAL INFILE '/tmp/tmpBZRvWK' INTO TABLE `h
BLOB是保存为
uint32
(numpy.array(intlist,dtype='uint32').tostring()
)的整数的numpy.array
。卸载时(
numpy.fromstring(blob,dtype='uint32')
),numpy报告字符串大小必须是元素大小的倍数
mysql -p somedb -e "LOAD DATA LOCAL INFILE '/tmp/tmpBZRvWK' INTO TABLE `hash2protids` FIELDS TERMINATED BY '....|....' LINES TERMINATED BY '....|....\n'"
编辑
我尝试了插入hash2protids(hash,protids)值('key',LOAD_FILE('/tmp/tmpfile')代码>(),但LOAD_文件仅适用于服务器上的文件。另外,我还有3百万行要插入,所以速度太慢了
EDIT2
现在我依靠的是MySQLdb
executemany,因为它是:
- 比插入单行快得多
- 可以加载任何数据类型
代码如下所示:
step = 1000
data = []
cmd = "INSERT INTO sometable (hash, protids) VALUES (%s, %s)"
for (hash, protids) in GENERATOR:
pblob = numpy.array(protids, dtype='uint32').tostring()
data.append((hash, pblob))
if len(data)>step:
cur.executemany(cmd, data)
data = []
if data:
cur.executemany(cmd, data)
注意,我每1000个元素就拆分cur.executemany一次,因为在一次执行所有条目时,由于“max_allowed_packet”限制,我遇到了MySQL错误