the*_*hey 3 python api session sqlalchemy crud
我是sqlalchemy的新手,正在尝试弄清楚如何使事情更清洁和连接。
我创建了一个/ model base.py文档,在其中创建了一个会话并在表中(以及关系等)建立了所有实体。我想创建另一个模块,在其中我可以对base.py中的实体(表)进行CRUD操作。该文件称为object.py,具有BaseAPI(object)类,并且具有不同的功能“创建”,“读取”,“更新”和“删除”。我想确保我连接到object.py中的表(base.py)并在实体User上进行操作。在这种情况下,实体(表)为“用户”。
这就是我在API object.py doc中所拥有的:
#!/usr/bin/env python
from sqlalchemy import create_engine
from sqlalchemy.orm import relationship, backref, sessionmaker
from datetime import datetime, timedelta
import notssdb.model
from base import User #importing from the module base.py -- doesn't work
engine = create_engine('sqlite:///./notssdb.db', echo=True) #in-memory sql engine
# create a Session
Session = sessionmaker(bind=engine)
class BaseAPI(object):
# DBSession = scoped_session(sessionmaker(engine))
# users = DBSession.query(User).all()
def __init__ (self):
session = Session()
# CREATE USER
def create_user(self, username, password, fullname):
new_user = User(username, password, fullname)
self.session.commit(new_user)
print(username, password, fullname)
Run Code Online (Sandbox Code Playgroud)
我要导入太多东西吗?我是否需要导入所有sqlalchemy工具?我在BaseAPI类下的初始化构造函数是否需要实例化数据库会话?
1.我要进口太多东西吗?我是否需要导入所有sqlalchemy工具?
Sqlalchemy没有它自己的编码样式,您必须遵循Python编码样式。如果您不使用任何模块,则没有导入它的意义。
我看不到已经使用过,from sqlalchemy.orm import relationship, backref并且应该在定义时使用它models,因此您不需要导入这些模块。
2.我在BaseAPI类下的init构造函数是否需要实例化数据库会话?
session在BaseAPI中没有硬性规定可以启动,甚至可以像这样编写程序。
#!/usr/bin/env python
from sqlalchemy import create_engine
from sqlalchemy.orm import relationship, backref, sessionmaker
from datetime import datetime, timedelta
import notssdb.model
from base import User #importing from the module base.py -- doesn't work
engine = create_engine('sqlite:///./notssdb.db', echo=True) #in-memory sql engine
# create a Session
Session = sessionmaker(bind=engine)
session = Session()
class BaseAPI(object):
# CREATE USER
def create_user(self, username, password, fullname):
new_user = User(username, password, fullname)
session.commit(new_user)
print(username, password, fullname)
Run Code Online (Sandbox Code Playgroud)
但是,与您的connection一代人打成一片并不是好习惯user manager,我建议您遵循这种方式。
注意: 这只是一个示例代码,我没有执行,您只需要遵循此structure代码即可。
首先创建单独的模块进行连接管理,可能connection_manager.py与以下内容类似。
from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker
engine = create_engine('sqlite:///./notssdb.db', echo=True)
# create a Session
Session = sessionmaker(bind=engine)
class SessionManager(object):
def __init__(self):
self.session = Session()
Run Code Online (Sandbox Code Playgroud)
然后在此处创建您的文件user_manger.py并将其导入SessionManager。
from base import User # this is your User model
from connection_manager import SessionManager
class UserManager(SessionManager):
def create_user(self, username, password, fullname):
new_user = User(username, password, fullname)
self.session.commit(new_user)
print(username, password, fullname)
def delete_user(self, *args):
pass # your code
Run Code Online (Sandbox Code Playgroud)
这样,您可以使代码更整洁。
| 归档时间: |
|
| 查看次数: |
1627 次 |
| 最近记录: |