使用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”。 非常感谢您的帮助。
答案 0 :(得分:0)
conn.text_factory = str
适用于Python 2;如果您使用的是Python 3,则必须提供自己的魔术函数,该函数以字节为单位,并输出您想要的字符串是什么。一种选择是尝试对该字符串进行解码,如果失败,则返回原始字节。如果您始终可以处理字节,那么只需
conn.text_factory = bytes
就足够了。有关血腥细节,请参见https://docs.python.org/3.7/library/sqlite3.html。