如何使用 SQLAlchemy 的反射从数据库 table 加载数据?

How to use SQLAlchemy's reflection to load data from a database table?

我正在尝试使用 SQLAlchemy 中的反射功能与包含数据的现有数据库进行交互。

我目前的工作:

import os
import fastapi
import databases
import sqlalchemy
from typing import List
from pydantic import BaseModel
from dotenv import load_dotenv

load_dotenv()

DATABASE_URL = os.getenv('STAGING_SQLALCHEMY_DATABASE_URL')
database = databases.Database(DATABASE_URL)

engine = sqlalchemy.create_engine(DATABASE_URL)

metadata = sqlalchemy.MetaData()
metadata.reflect(bind=engine)
metadata.create_all(engine)

us_states = metadata.tables['us_states']


class USStates(BaseModel):
    name: str
    code: str


router = fastapi.APIRouter()


@router.get("/us_states/", response_model=List[USStates])
async def read_us_states():
    query = us_states.select()
    return await database.execute(query)

由于某些原因,get_us_states() returns 为空,即使 table 当前有数据。

我该如何解决这个问题?

原来问题出在 STAGING_SQLALCHEMY_DATABASE_URL

我拼错了我的数据库名称,出于某种原因,即使我在 main.py 中为它准备了 try & catch,它也没有抛出错误。

仅供参考,您在处理 postgres 时 DB_URL 的格式应该是:

postgresql://user:password@host/dbname