如何在Python中将巨大的字符串(长度50000)存储到MySQL中

-2 投票
4 回答
1248 浏览
提问于 2025-04-18 01:36

如何用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)。

这个问题只是跟语法有关,而不是数据或列的类型。

撰写回答