После прочтения следующей ссылки https://github.com/googleapis/python-bigquery-sqlalchemy мне удалось запросить таблицу, хранящуюся в Google BigQuery, с помощью SLQAlchemy. Теперь я хотел бы создать модель пользователей SQLAlchemy в Google BigQuery, чтобы я мог использовать функции входа в систему Flask (например, UserMixin), чтобы проверить, аутентифицирован ли пользователь, активен и т. д., но в этом случае моя база данных хранится в BigQuery вместо традиционной базы данных SQL (в основном из-за затрат на выставление счетов, поскольку я считаю, что Google Cloud SQL намного дороже, чем Google BigQuery).
Это мой код:
from sqlalchemy.engine import create_engine
from flask_sqlalchemy import SQLAlchemy
engine = create_engine('bigquery://my_project',credentials_path='my_credentials.json')
db = SQLAlchemy()
class Users(db.Model):
id = db.Column(db.Integer, primary_key=True)
username = db.Column(db.String(15), unique=True, nullable = False)
email = db.Column(db.String(50), unique=True)
Users.metadata.create_all(engine)
К сожалению, я получаю следующую ошибку:
DatabaseError: (google.cloud.bigquery.dbapi.exceptions.DatabaseError) 400 Table "users" must be qualified with a dataset (e.g. dataset.table).
Я попытался изменить переменную двигателя следующим образом:
engine = create_engine('bigquery://my_project.my_dataset',credentials_path='my_credentials.json')
но затем я получаю следующую ошибку (я заинтригован частью None
):
ValueError: table_id must be a fully-qualified ID in standard SQL format, e.g., "project.dataset.table_id", got my_project.my_dataset.None.users
Кто-нибудь знает, как создать модель SQLAlchemy в Google BigQuery?
Можете ли вы попробовать это:
from sqlalchemy.engine import create_engine
from flask_sqlalchemy import SQLAlchemy
from pybigquery.api import ApiClient
from flask import Flask
db = SQLAlchemy()
#ToDo:Change project name and dataset name.
engine = create_engine('bigquery://my-project/my-dataset')
db = SQLAlchemy()
class Users(db.Model):
id = db.Column(db.Integer, primary_key=True)
username = db.Column(db.String(15), unique=True, nullable = False)
email = db.Column(db.String(50), unique=True)
Users.metadata.create_all(engine)
Я решил ошибку, добавив имя набора данных.
engine = create_engine('bigquery://my-project/my-dataset')
Хороший! Я только что добавил свои учетные данные в ваше решение, и оно работает! Спасибо