在SQLAlchemy中用命令行与数据库进行交互
我在学习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导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。