python与sql的区别与联系_python – 在SQLAlchemy中Model.query和session.query(Model)有什么区别?...

我是SQLAlchemy的初学者,发现查询可以通过2方法完成:

方法1:

DBSession = scoped_session(sessionmaker())

class _Base(object):

query = DBSession.query_property()

Base = declarative_base(cls=_Base)

class SomeModel(Base):

key = Column(Unicode, primary_key=True)

value = Column(Unicode)

# When querying

result = SomeModel.query.filter(...)

方法2

DBSession = scoped_session(sessionmaker())

Base = declarative_base()

class SomeModel(Base):

key = Column(Unicode, primary_key=True)

value = Column(Unicode)

# When querying

session = DBSession()

result = session.query(SomeModel).filter(...)

他们之间有什么区别吗?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是我对这段代码的建议和优化: 1. 使用 Flask 的上下文对象获取 request 对象,避免在静态方法使用全局变量 ```python from flask import request class UserSigninLog(db.Model): # ... @staticmethod def add_user_signin_log(userid: str, username: str): """新增登录日志""" user_signin_log = UserSigninLog() user_signin_log.userid = userid user_signin_log.username = username user_signin_log.ip_addr = request.access_route[0] user_signin_log.request_user_agent = request.headers.get("User-Agent") user_signin_log.c_date = datetime.now() db.session.add(user_signin_log) db.session.commit() return True @staticmethod def check_ip_and_header_within_x_days(userid: str, days=7): """检查x天内登录过的ip地址和请求头""" user_agent = request.headers.get("User-Agent") ip_addr = request.access_route[0] c_date = datetime.now() - timedelta(days=days) user_ip_addr_log = UserSigninLog.query.filter_by(userid=userid, ip_addr=ip_addr, request_user_agent=user_agent).filter(UserSigninLog.c_date >= c_date).first() if user_ip_addr_log: return True return False ``` 2. 使用 SQLAlchemy 的 ORM 语法查询,避免手写 SQL 语句 ```python from sqlalchemy import and_ class UserSigninLog(db.Model): # ... @staticmethod def check_ip_and_header_within_x_days(userid: str, days=7): """检查x天内登录过的ip地址和请求头""" user_agent = request.headers.get("User-Agent") ip_addr = request.access_route[0] c_date = datetime.now() - timedelta(days=days) user_ip_addr_log = UserSigninLog.query.filter(and_(UserSigninLog.userid == userid, UserSigninLog.ip_addr == ip_addr, UserSigninLog.request_user_agent == user_agent, UserSigninLog.c_date >= c_date)).first() if user_ip_addr_log: return True return False ``` 3. 让静态方法更加灵活,接收 request 对象作为参数 ```python class UserSigninLog(db.Model): # ... @staticmethod def add_user_signin_log(userid: str, username: str, request): """新增登录日志""" user_signin_log = UserSigninLog() user_signin_log.userid = userid user_signin_log.username = username user_signin_log.ip_addr = request.access_route[0] user_signin_log.request_user_agent = request.headers.get("User-Agent") user_signin_log.c_date = datetime.now() db.session.add(user_signin_log) db.session.commit() return True @staticmethod def check_ip_and_header_within_x_days(userid: str, request, days=7): """检查x天内登录过的ip地址和请求头""" user_agent = request.headers.get("User-Agent") ip_addr = request.access_route[0] c_date = datetime.now() - timedelta(days=days) user_ip_addr_log = UserSigninLog.query.filter(and_(UserSigninLog.userid == userid, UserSigninLog.ip_addr == ip_addr, UserSigninLog.request_user_agent == user_agent, UserSigninLog.c_date >= c_date)).first() if user_ip_addr_log: return True return False ``` 这些是我对这段代码的建议和优化,希望能对你有所帮助。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值