如何使用 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
我正在尝试使用 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