在SQLAlchemy中用命令行与数据库进行交互

编程语言 2026-07-10

我在学习FastAPI,并且想用shell或终端通过SQLAlchemy与数据库交互,以便更好地练习SQLAlchemy。

所以我用我的sync-db来连接数据库,但并未成功。

下面是我用来导入函数 get_db 的代码:

```python
from sqlalchemy import create_engine
from sqlalchemy.orm import DeclarativeBase, sessionmaker

# where to connect
SQLALCHEMY_DATABASE_URL = "sqlite:///./sqlite.db"

engine = create_engine(
    SQLALCHEMY_DATABASE_URL,
    # sqllite one connection condition
    connect_args={"check_same_thread": False}
)

# session == database transaction, each request get its own
sessionLocal = sessionmaker(
    autocommit=False, autoflush=False, bind=engine
)


class Base(DeclarativeBase):
    pass


# function to provide session to our routes
def get_db():
    with sessionLocal() as db:
        yield db

在 Python 交互式 shell 中,我这样做:

from app.syncDB get_db
db = get_db()
db.execute(...)

它报错了:

> AttributeError: 'generator' 对象没有属性 'execute'

## 解决方案

`get_db()` 是 FastAPI 的一个惯用写法,正如你所发现的那样,在 Python 交互式 shell 中并不起作用。

如果你想在 Python shell 中使用 SQLAlchemy 的会话,请直接从你的 sessionmaker 创建一个会话并使用它。

with sessionLocal() session:
    result = session.execute(my_query)

```

本质上,在Python shell中你很难使用FastAPI的依赖注入功能。相反,请参考 SQLAlchemy文档 中的示例来获得指导。

站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。

相关文章