Python:在sqlite3或mysql中存储字符串列表的正确方法

时间:2013-12-07 17:15:12

标签: python mysql sqlite

我试图将字符串值列表存储到sql数据库中。

list = ['please','help','me']

我尝试过转换为unicode并使用array.array(' u',list)

unicode_list = unicode(list)
array.array('u', list)

这不会产生我想要的结果。我不太关心能够在插入数据库后搜索该值。最后,我现在不打算使用NOSQL替代方案。任何帮助将不胜感激。提前谢谢。

3 个答案:

答案 0 :(得分:2)

使用正确的序列化机制(如JSON),并将其存储在文本字段中。

>>> json.dumps(['please','help','me'])
'["please", "help", "me"]'
>>> json.loads('["please", "help", "me"]')
[u'please', u'help', u'me']

答案 1 :(得分:1)

列表中是否有特定数量的项目?

如果有,请尝试使用for循环将每个项目插入到自己的列中。

您也可以尝试一起加入列表,并在检索时将字符串拆分为:

list = ['Hope','this','helps']
'|'.join(list)

加载后:

list = result.split('|')

答案 2 :(得分:0)

要添加到Ignacio Vazquez-Abrams的答案中,这是将列表或列表列表存储到Sqlite DB中的完整演练。

>>> # Create dataframe
>>> df = pd.DataFrame({'Doc:': ["A", "B", "C"],
>>>                   'Doc_Pages': [31, 20, 45],
>>>                   'Data': [["A B C", "D E F"], ["G H I", "J K L"], ["M N O", "P Q R"]]
>>>                   })

>>> print(df)
Doc   Doc_Pages      Data
A       31       ["A B C", "D E F"]
B       20       ["G H I", "J K L"]
C       45       ["M N O", "P Q R"]

>>> # Create DB
>>> import sqlite3
>>> conn = sqlite3.connect('db.sqlite')
>>> cur = conn.cursor()
>>> cur.execute('CREATE TABLE IF NOT EXISTS TableName(ID INTEGER PRIMARY KEY AUTOINCREMENT)')

>>> # Store df into DB
>>> df.Data = df.Data.apply(lambda x: json.dumps(x))
>>> df.to_sql(name='Extracted_Data', con=conn, if_exists='replace')

>>> # Load df from DB
>>> df_new = pd.read_sql('SELECT * FROM TableName', con=conn)
>>> df_new.Data = df_new.Data.apply(lambda x: json.loads(x))

>>> print(df_new)
Doc   Doc_Pages      Data
A       31       ["A B C", "D E F"]
B       20       ["G H I", "J K L"]
C       45       ["M N O", "P Q R"]