目录

一、数据模型定义

二、打印简单的 SQL

三、打印稍微复杂的 SQL

四、打印和方言相关的SQL

五、显示参数


一、数据模型定义

在文件 models.py 中定义表 cat 的模型:

import sqlalchemy
from sqlalchemy.ext.declarative import declarative_baseBase = declarative_base()class Cat(Base):__tablename__ = "cat"id = sqlalchemy.Column(sqlalchemy.Integer, primary_key=True, autoincrement=True)name = sqlalchemy.Column(sqlalchemy.String(256), nullable=True)addtime = sqlalchemy.Column(sqlalchemy.DateTime())

二、打印简单的 SQL

from sqlalchemy.orm import Query
import modelsquery = Query(models.Cat).filter(models.Cat.name == 'hellocat')
stat = query.statement
print(stat)

输出

SELECT cat.id, cat.name, cat.addtime
FROM cat
WHERE cat.name = :name_1

三、打印稍微复杂的 SQL

from sqlalchemy.orm import Query
import modelsquery = Query(models.Cat).filter(models.Cat.id > 10).order_by(models.Cat.name.desc()).offset(10).limit(5)
print(query.statement)

输出

SELECT cat.id, cat.name, cat.addtime
FROM cat
WHERE cat.id > :id_1 ORDER BY cat.name DESCLIMIT :param_1 OFFSET :param_2

四、打印和方言相关的SQL

打印SQL方言,需要在 statement 编译的时候指定方言类型

  • postgresql 方言:query.statement.compile(dialect=postgresql.dialect())
  • mysql 方言:query.statement.compile(dialect=mysql.dialect())
from sqlalchemy.dialects import postgresql, mysql
from sqlalchemy.orm import Query
import modelsquery = Query(models.Cat).order_by(models.Cat.id.desc()).offset(10).limit(5)
print(query.statement.compile(dialect=postgresql.dialect()))
print(query.statement.compile(dialect=mysql.dialect()))

输出:

SELECT cat.id, cat.name, cat.addtime
FROM cat ORDER BY cat.id DESC LIMIT %(param_1)s OFFSET %(param_2)s
SELECT cat.id, cat.name, cat.addtime
FROM cat ORDER BY cat.id DESC LIMIT %s, %s

五、显示参数

在上面的例子中,我们发现,所有的参数都是占位符形式,我们传入的参数没有被带入SQL中。这是因为上面的例子中少加了参数: compile_kwargs

下面的代码可以打印带参数的SQL语句:

from sqlalchemy.dialects import postgresql, mysql
from sqlalchemy.orm import Query
import modelsquery = Query(models.Cat).order_by(models.Cat.id.desc()).offset(10).limit(5)
print(query.statement.compile(dialect=postgresql.dialect(), compile_kwargs={"literal_binds": True}))

输出:

SELECT cat.id, cat.name, cat.addtime
FROM cat ORDER BY cat.id DESC LIMIT 5 OFFSET 10

Python: SQLAlchemy 打印 SQL语句相关推荐

  1. php打印mysql sql_php的打印sql语句的方法

    echo M()->_sql(); 这样就可以调试当前生成的sql语句: //获取指定天的开始时间和结束时间 $datez="2016-05-12"; $t = strtot ...

  2. EOS下控制台以及图形界面打印sql语句

    EOS下控制台以及图形界面打印sql语句 场景需求:在eos中打印sql语句,包括数据实体,查询实体和命名sql的sql语句. 所需资源: P6spy:负责拦截sql,并打印. Sqlprofiler ...

  3. mybatis开启log_mybatis使用spring-druid数据源连接池配置log4j打印sql语句以及开启监控平台...

    杂七杂的杂 作为程序员,开发工程中,一套利于测试或者监控的工具很重要,mybatis默认没有提供log4j的打印sql语句的配置. 这对于开发rest服务,提供接口的开发者而言,是在很不好做,再加上m ...

  4. Mybatis 开启控制台打印sql语句

    概述 springboot+mybatis整合过程中,开启控制台sql语句打印的多种方式: 方法1 在springboot+mybatis整合中,可以将springboot的配置文件添加如下一段也可: ...

  5. Spring boot mybatis 打印SQL语句

    有时候从前端传参数到后端查数据库的时候不是很清楚的知道哪些参数能起作用,这个时候就需要简便的sql语句让你知道数据查询的过程中的参数,SQL语句了. 第一种方式,用mybatis集成的方式,在你的ap ...

  6. Python编程 模拟SQL语句 实现对员工信息的增删改查

    一.问题描述 用 Python 模拟 sql 语句,实现对员工信息的增删改查. 封装函数,传入参数:文件路径和 sql 命令. 模拟 sql 语句实现对员工信息的现增删改查,并打印结果. 二.Pyth ...

  7. Mybatis如何打印sql语句

    1.SpringMVC集成mybatis配置 首先,添加mybatis的配置文件mybatis-config.xml,可以原样复制 <?xml version="1.0" e ...

  8. laravel打印sql语句_SQL语句为什么慢?索引为什么失效?

    为什么你写的sql查询慢?为什么你建的索引常失效?通过本篇内容,你将学会MySQL性能下降的原因,索引的简介,索引创建的原则,explain命令的使用,以及explain输出字段的意义.助你了解索引, ...

  9. preparedstatement打印sql语句_Mybatis是这样防止sql注入的

    链接:https://juejin.im/post/5e131203e51d4541082c7db3 Mybatis这个框架在日常开发中用的很多,比如面试中经常有一个问题:$和#的区别,它们的区别是使 ...

最新文章

  1. MySQL/MariaDB数据库主从复制
  2. HttpClient(4.5.x)正确的使用姿势
  3. poj1190深搜 生日蛋糕
  4. Apache Spark学习:利用Scala语言开发Spark应用程序
  5. 报告分析|2021移动社交行业有哪些新风向?
  6. oracle 存储过程字符替换,Oracle存储过程常用字符串处理函数整理
  7. 镭速-文件传输系统,单机、负载均衡,使用外部AD域用户
  8. spring mvc传值html页面,spring mvc向前台页面传值-ModelAndView
  9. adb shell读取返回值_shell学习笔记03(函数amp;shell工具amp;面试题)
  10. Android 自动检测更新,自动下载apk更新版本
  11. Pandas——筛选数据(loc、iloc)
  12. web安全day40:最新版OpenVAS的安装配置
  13. error LNK2019: unresolved external symbol __imp__JNI_CreateJavaVM@12 referenced in function _wmaim
  14. 编程开发之--java多线程学习总结(4)
  15. cplex的下载、安装、IDE编程及相关问题解决
  16. IOS 视屏开发之AVPlayer的基本使用
  17. python切片详解_python切片及sys.argv[]用法详解
  18. 基于PaddlePaddle的OCR识别,识别车牌号
  19. 图解敏捷教练和 ScrumMaster
  20. Excel 多级下拉菜单设置,数据有效性

热门文章

  1. 一个程序员2年外包工作的跳槽之路
  2. 时滞/延迟微分方程(delay-differential equation)
  3. AT91SAM9M10开发板
  4. 【已解决】Caused by: java.lang.ClassNotFoundException: org.springframework.boot.context.properties.
  5. 北邮数据挖掘文本分类实验
  6. Web3时代加密元宇宙才是唯一可行的道路
  7. 【运筹学】对偶理论 : 对偶性质 ( 对称性质 | 对称性质推导 )
  8. Shell declare 变量声明
  9. dataTable固定列固定行
  10. 为什么衡山派掌门人莫大先生一直没有婚娶