Я использую SQLAlchemy для управления базой данных Sqlite, когда я пытаюсь извлечь данные из таблицы, содержащей столбцы с символами Unicode, у меня возникает следующее исключение sqlite.
sqlalchemy.exc.OperationalError: (sqlite3.OperationalError) Could not decode to UTF-8 column '_svcInfo_svc_name' with text 'BAR�A TV'
(Background on this error at: http://sqlalche.me/e/e3q8)
Я искал решение для проблема при использовании SQLalchemy, но я ничего не нашел, кажется, что это проблема, определяющая c для движка SQLite.
в соответствии с моим исследованием этой проблемы, рекомендуется определить text_factory
для str или байтов , но это не решило проблему в моем случае.
Ниже моего сценария открытия базы данных, зная, что если я заменю текст в столбцах, содержащих символы Юникода, он будет работать правильно
Base = declarative_base()
def openDatabase(filename = 'SERVICE.db'):
global Base
try :
engine = db.create_engine("sqlite:///{}".format(filename))
engine.raw_connection().connection.text_factory = bytes
Base.metadata.create_all(engine)
Session = sessionmaker()
session = Session(bind=engine)
return session
except:
return None
когда я загружаю базу данных напрямую, как это, у меня возникает то же исключение
import sqlite3
conn = sqlite3.connect('SERVICE.db')
cur = conn.cursor()
text = cur.execute("SELECT * FROM _svcInfo").fetchall()
print (text)
, но в этом случае, когда я устанавливаю tex_factory в байты, как следует из его работы, это не тот случай, когда я использую sqlalchemy
import sqlite3
conn = sqlite3.connect('SERVICE.db')
conn.text_factory = bytes
cur = conn.cursor()
text = cur.execute("SELECT * FROM _svcInfo").fetchall()
print (text)
у кого-то есть решение этой проблемы, в противном случае мне пришлось бы обходиться без использования SQLAlchemy,
Than К