如何在Python中将巨大的字符串(长度50000)存储到MySQL中
如何用Python把一个很大的字符串(长度50000)存储到MySQL里。
我有一个接近50000个字符的大字符串,我需要把它存到MySQL数据库里。有些人建议把这个字符串存成blob或text类型。
有没有人能帮我把字符串转换成blob类型?
def main():
stringKey=''
stringValues=''
keys=ccv.keys() //ccv is a dictionary data structure
vectors=ccv.values() //ccv is a dictionary data structure
for key in keys:
stringKey='#'.join(key for key in keys)
for value in vectors:
stringValues='$'.join(str(value) for value in vectors)
insert(stringKey,stringValues)
print 'insert successful'
def insert(k,v):
db = mysql.connector.connect(user='root', password='abhi',
host='localhost',
database='cbir')
sql= 'INSERT INTO ccv(key,vector) VALUES(%s,%s)'
args = (k,v)
cursor=db.cursor()
cursor.execute(sql,args)
db.commit()
db.close()
错误信息:
ProgrammingError: 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'key,vector) VALUES('27:1:8#27:1:9#25:2:11#6:9:8#6:9:9#6:9:6#6:9:7#6:9:4#6:9:5#27' at line 1
4 个回答
0
sql = "INSERT INTO ccv(`key`,`vector`) VALUES(%s,%s)"
这个可以正常工作
0
你没有把参数和SQL语句关联起来。
你想要的是
cursor.execute(sql, args)
而不是
cursor.execute(sql)
0
你不需要把字符串转换一下,而是要把数据库里这个字段的类型从varchar改成longtext。
1
你在这里犯了一个小错误:
'INSERT INTO ccv(key,vector) VALUES(%s,%s)'
应该是:
"INSERT INTO ccv (`key`, `vector`) VALUES(%s, %s)"
注意这里的 `
是用来标识列名的。
正如Larry提醒我的,参数化查询中的值不需要加引号。
如果字段已经设置为长文本,这样做就不需要把数据转换成二进制大对象(blobs)。
这个问题只是跟语法有关,而不是数据或列的类型。