SQLAlchemy

在使用Python操作数据库时,可以使用SQLAlchemy库:

SQLAlchemy 是python 操作数据库的一个库。能够进行 orm 映射官方文档 sqlchemy

SQLAlchemy“采用简单的Python语言,为高效和高性能的数据库访问设计,实现了完整的企业级持久模型”。SQLAlchemy的理念是,SQL数据库的量级和性能重要于对象集合;而对象集合的抽象又重要于表和行

安装和初始化

pip安装命令

pip install sqlalchemy

检查是否安装成功

>>>import sqlalchemy

>>>sqlalchemy.__version__

'1.2.10'

>>>

显示版本号1.2.10,这样就说明安装成功了

使用sqlalchemy对数据库操作

定义元信息,绑定到引擎

>>> from sqlalchemy import *

>>> from sqlalchemy.orm import *

>>> engine = create_engine('sqlalchemy.db', echo=True) #定义引擎

>>> metadata = MetaData(engine) # 绑定元信息

>>>

创建表

>>> users_table = Table('users', metadata,

... Column('id', Integer, primary_key=True),

... Column('name', String(40)),

... Column('email', String(120)))

>>>

>>> users_table.create()

>>> users_table = Table('users', metadata, autoload=True)

插入数据

>>>i = users_table.insert()

>>>i.execute(name='linyk3', email='linyk2655@126.com')

建立ORM映射

class User(db.Model):

__tablename__ = "user_table"

id = db.Column(db.Integer, primary_key=True, autoincrement=True)

name = db.Column(db.String(40))

email = db.Column(db.String(120))

def __repr__(self):

return '%s(%r, %r)' % (self.__class__.__name__, self.name, self.email)

建立会话

>>> session = create_session()

>>> query = session.query(User)

>>> u = query.filter_by(name='linyk3').first()

如果有多个查询条件,并且查询条件不确定

可以使用下面查询:

def get_user(id=None, name=None, email=None, page=None):

q = self.session.query(User)

if id:

q = q.filter(User.id == id)

if name:

q = q.filter(User.name == name)

if email:

q = q.filter(User.email == email)

if page:

q = q.limit(page * pageSize)

return q.all()

还可以使用filter_by,但是不支持比较运算符

filters = {'name': 'linyk3', 'email': 'linyk2655@126.com'}

User.query.filter_by(**filters).first()

filter比filter_by的功能更强大,支持比较运算符,支持or_、in_等语法,如果表中有其他字段需要判断,例如年龄,日期等

filters = {

User.name == 'linyk3',

User.age > 25

}

User.query.filter(*filters).first()

经过试验,参数中 dict {} 和 list [] 都是可以的。

filters = [

User.name == 'linyk3',

User.age > 25 ]

User.query.filter(*filters).first()

如果查询条件有多个,且不确定前端是否传过来,或者传过来的值是否为空,可以采用查询条件拼接来实现,这时list.append()方法就很有用处了,项目例子:

@admin.route("/query", methods=["GET"])

@admin.route("/query/", methods=["GET"])

def clock_query(page=None):

if page is None:

page = 1

# app.logger.info(json.dumps(request.args))

# 拼接查询条件

param = []

if ('userId' in request.args) and (request.args['userId']):

userId = request.args['userId']

param.append(LogInfo.userId == userId)

if ('userName' in request.args) and (request.args['userName']):

userName = request.args['userName']

param.append(LogInfo.userName == userName)

if ('startDate' in request.args) and (request.args['startDate']):

startDate = request.args['startDate']

param.append(db.cast(LogInfo.startTime, db.DATE) >= db.cast(startDate, db.Date))

if ('endDate' in request.args) and (request.args['endDate']):

endDate = request.args['endDate']

param.append(db.cast(LogInfo.startTime, db.DATE) <= db.cast(endDate, db.Date))

for item in param:

app.logger.info(item)

page_data = LogInfo.query.filter(*param).paginate(page=page, per_page=20)

return render_template("loginfo.html", page_data=page_data)

这样后台能接收的请求就很灵活了:

# 四个查询条件都有

http://localhost:8080/admin/query?userId=linyk001&userName=linyk3&startDate=20180723&endDate=20180723

# 只有两个查询条件

http://localhost:8080/admin/query?userId=linyk001&userName=linyk3

# 有四个查询条件,但其中两个为None,所以不应该作为查询条件

http://localhost:8080/admin/query?userId=&userName=&startDate=20180723&endDate=20180723

这样就非常灵活了,初学python,捣鼓了挺久的才实现,发现python还是很方便的,继续努力!

python 条件查询_Python SQLAlchemy 不确定条件查询相关推荐

  1. python中多条件语句_Python中的带条件语句

    所以我编写了这段代码:它的调用方式如下: with c_with(needs_with(), lambda: get_stuff()) as gs: ##DOESN't call get_stuff( ...

  2. python排序链表_python按照多个条件排序的方法

    python按照多个条件排序的方法 对tuple进行排序,先按照第一个元素升序,如果第一个元素相同,再按照第二个元素降序排列. L = [(12, 12), (34, 13), (32, 15), ( ...

  3. python数据库模糊查询_python中数据库like模糊查询方式

    python中数据库like模糊查询方式 在Python中%是一个格式化字符,所以如果需要使用%则需要写成%%. 将在Python中执行的sql语句改为: sql = "SELECT * F ...

  4. python sqlsever 时间_Python sqlalchemy时间戳及密码管理实现代码详解

    一.时间戳 实际开发中,我们一般希望create_time和update_time这两个属性能自动设置,所以在建表的时候需要在model上特殊处理一下: from sqlalchemy.sql imp ...

  5. python实现火车票查询_Python脚本实现12306火车票查询系统

    最近我看到看到使用python实现火车票查询,我自己也实现了,感觉收获蛮多的,下面我就把每一步骤都详细给分享出来.(注意使用的是python3) 首先我将最终结果给展示出来: 在cmd命令行执行:py ...

  6. python socket 域名_python实现域名系统(DNS)正向查询的方法

    本文实例讲述了python实现域名系统(DNS)正向查询的方法.分享给大家供大家参考,具体如下: 域名系统(DNS)是一个分布式的数据库,主要是用来把主机名换成IP地址. DNS存在有两大理由: (1 ...

  7. sqlalchemy.orm 多条件查询更新

    sqlalchemy.orm 多条件datas = session.query(Stock).filter(and_(Stock.now_price<25,Stock.type==0,Stock ...

  8. python海龟教程_Python 零基础 快速入门 趣味教程 (咪博士 海龟绘图 turtle) 7. 条件循环...

    条件循环能够让程序在条件成立时(即为真时)重复执行循环体中的语句.如果条件一直成立(即永远不会为假),则循环会一直进行下去,不会停止.如果初始时,条件不成立,则循环 1 次也不会执行.Python 中 ...

  9. python elif 用法_Python入门高级教程--Python 条件语句

    Python 条件语句 Python条件语句是通过一条或多条语句的执行结果(True或者False)来决定执行的代码块. 可以通过下图来简单了解条件语句的执行过程: Python程序语言指定任何非0和 ...

  10. python编程的条件语句_Python 条件语句

    Python 条件语句 Python条件语句是通过一条或多条语句的执行结果(True或者False)来决定执行的代码块. 可以通过下图来简单了解条件语句的执行过程: Python程序语言指定任何非0和 ...

最新文章

  1. 每日一题(字符串拆分)
  2. HTML-语义类标签
  3. Qt Creator使用3D材质
  4. javafx打包路径问题_关于JavaFX的最常见问题
  5. 进程间通信之分别用共享内存和信号量实现卖票
  6. JQuery 函数 操作
  7. Android倒计时案例展示
  8. 如何恢复右键里新建记事本
  9. 关于redis的几点思考
  10. PHP正则表达式的运用
  11. poi导出excel 并实现合并单元格
  12. 无卡支付,快捷支付,认证支付,协议支付,代扣区别与联系
  13. Matlab 检测直线并求解直线方程
  14. ADNI数据集阅读整理
  15. c语言换行用分号代替,go语言换行的地方可以用分号替代吗?
  16. 可调稳压电源lm317实验报告_可调直流稳压电源实验报告 -
  17. 计算机如何进入ping,电脑怎么ping网络,教你电脑怎么ping网络
  18. c#中文字大全,转换为字符串格式
  19. 怎么修改扫描PDF?扫描件PDF修改编辑教程
  20. 小型三维引擎设计实现-渲染层的设计总结

热门文章

  1. DLL错误之——无法加载DLL***.dll:找不到指定的模块(异常来自HRESULT:0x8007007E)问题的终极感悟
  2. 2021-09-14 if__name__ == ‘__main__‘的用法
  3. python 装饰器常见场景与用法
  4. python初级爬虫工程师_如何入行爬虫工程师
  5. android for 语句,Android中消息循环
  6. python3.6 asyncio_python3.6以上 asyncio模块的异步编程模型 async await语法
  7. docker可用容量 查看_查看docker容器的内存占用
  8. python中变量pa和pa一样吗_仅限python中的pafy和vlc音频
  9. python降噪突出人声_KlipC带您探寻——华为全新智慧动态降噪耳机
  10. office另存为pdf的加载项_Word怎样转换成PDF