如何解决:“ sqlite3.OperationalError:无法解码为UTF-8”

时间:2019-06-14 11:06:51

标签: python database sqlite

使用Python sqlite3软件包,我从sqlite数据库(具有三个内部联接)中选择一些行,以便稍后将它们放入pandas数据框中。

我尝试运行以下代码从数据库中进行选择:

import pandas as pd
import sqlite3

# connect to the database
conn = sqlite3.connect("C:\Quant\Data_Storage2\sqlite\db\scorecard.db")
conn.text_factory = str
c = conn.cursor()

# create pandas df with data from the sqlite db
sql = '''SELECT MACRO_SA.SERIES_ID, MACRO_SA.COUNTRY_ID, MACRO_SA.DATA, 
         MACRO_SA.REL_DATE, HF_DATA.DATA
         FROM MACRO_SA
            INNER JOIN MAP_SERIES ON MAP_SERIES.CUR = MACRO_SA.COUNTRY_ID
            INNER JOIN HF_DATA ON MAP_SERIES.CUR = MACRO_SA.COUNTRY_ID
         WHERE (MAP_SERIES.CRNCY NOT NULL)  
            AND (HF_DATA.SERIES_ID = 'bg_cur')
'''
df_to_adj = c.execute(sql).fetchall()
conn.commit()
df_to_adj = pd.DataFrame(df_to_adj, columns=['SERIES_ID', 'COUNTRY_ID', 'DATA', 'REL_DATE', 'FX_RATE'])

我收到以下错误:“ sqlite3.OperationalError:无法解码为UTF-8”。 非常感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

conn.text_factory = str 

适用于Python 2;如果您使用的是Python 3,则必须提供自己的魔术函数,该函数以字节为单位,并输出您想要的字符串是什么。一种选择是尝试对该字符串进行解码,如果失败,则返回原始字节。如果您始终可以处理字节,那么只需

conn.text_factory = bytes

就足够了。有关血腥细节,请参见https://docs.python.org/3.7/library/sqlite3.html