В flask / python мне нужно сериализовать JSON (из Firestore) в объекты SQL Alchemy.
Я не хочу сериализовать объекты SQL Alchemy в JSON. Не это. Мне нужно обратное преобразование.
Идея состоит в том, чтобы перезаписать метод get_query
в представлении flask-admin, чтобы восстановить данные из Firestore, но при этом использовать всю мощь flask-admin, например, сортировку повыбранный столбец в представлении и т. д. Кроме того, в этом приложении есть данные, которые сохраняются в postgresql (и мы используем SQL Alchemy в качестве ORM), и данные, которые будут поступать из Firestore. Они должны жить вместе.
Некоторый код и его ошибки:
# flask is imported as f
# flask_sqlalchemy is imported as sa
# also firebase_admin and other related classes with Firebase have been imported
class FakeView(OurExampleModelView):
column_default_sort = "title"
def get_query(self):
# initialize firebase app
cred = credentials.Certificate(f.current_app.config['GOOGLE_APPLICATION_CREDENTIALS'])
firebase_admin.initialize_app(cred)
db = firestore.client()
users_ref = db.collection(u'users')
docs = users_ref.stream()
return sa.BaseQuery(docs)
и получить эту ошибку:
sqlalchemy.exc.InvalidRequestError
sqlalchemy.exc.InvalidRequestError: SQL expression, column, or mapped entity expected - got '<google.cloud.firestore_v1.document.DocumentSnapshot object at 0x7fe02609d5c0>'
Также пробовал:
class FakeView(OurExampleModelView):
column_default_sort = "title"
def get_query(self):
# initialize firebase app
cred = credentials.Certificate(f.current_app.config['GOOGLE_APPLICATION_CREDENTIALS'])
firebase_admin.initialize_app(cred)
db = firestore.client()
users_ref = db.collection(u'users')
docs = users_ref.stream()
res = [doc.to_dict() for doc in docs]
return sa.BaseQuery(docs)
, а затем получил это:
sqlalchemy.exc.InvalidRequestError
sqlalchemy.exc.InvalidRequestError: SQL expression, column, or mapped entity expected - got '{'title': 'Title example', 'image': 'fake_image_url'}'
Есть идеи, как я могу конвертировать из объектов JSON в объекты SQLAlchemy?
Большое спасибо!