python第三方库系列之十一--django.db的connection库

    平时用django去向数据库中读写数据都是用的Model,直接molel.objects.filter(Q())或者model.objects.get(Q())等读取数据。然而这样的Q()查询SQL语句就必须符合django ORM的规范,今天想总结的是用connection库和原生的SQL语句读写数据库。
from django.db import connection
SQL_str = "select * from book"
cursor = connection.cursor()
cursor.execute(SQL_str)
domain_and_record_db_datas = cursor.fetchall()
    今天碰到一个特别奇葩的问题,修复了一下午才得以解决,就是SQL语句中的LIKE方法。看看一下是怎么演变的:

1. 平时的LIKE方法是:

SQL_str = "select * from book where name LIKE 'xxx'"

这条语句相当于:
SQL_str = "select * from book where name = 'xxx'"
2. 为了模糊查询,应该这样:
SQL_str = "select * from book where name LIKE '%xxx%'"
3. 但在python中,“%”是一个特殊字符,需要两个“%%”才表示一个“%”,所以写成这样:

SQL_str = "select * from book where name LIKE '%%xxx%%'"
print SQL_str
# select * from book where name LIKE '%xxx%'

如果写成这样,打印出来的SQL语句是可以在SQL命令行下运行的,但在我的django中会报出以下错误:

'Cursor' object has no attribute '_last_executed'
我在网上找了很久,都说只要加上“%%”就行,我的就是报错。于是我大胆的加上了“%%%%”,告诉编译器我这个是百分号,居然OK了!
4. 总结,在django中如果加上2个“%”还报错,就加上4个“%”,所以写成这样:

from django.db import connection
SQL_str = "select * from book where name LIKE '%%%%xxx%%%%'"
cursor = connection.cursor()
cursor.execute(SQL_str)
domain_and_record_db_datas = cursor.fetchall()
成功了!

### Django 数据查询日志功能 在 Django 中,可以通过配置 `settings.py` 文件中的日志设置来启用数据查询的日志记录功能。这允许开发者查看应用程序执行的所有 SQL 查询语句及其参数。以下是实现此功能的方法: #### 启用数据查询日志 为了捕获所有的数据查询操作,可以修改项目的 `LOGGING` 配置项,在其中添加针对数据后端的特定日志处理器。 ```python LOGGING = { 'version': 1, 'disable_existing_loggers': False, 'handlers': { 'console': { 'level': 'DEBUG', 'class': 'logging.StreamHandler', }, }, 'loggers': { 'django.db.backends': { # 这里指定要监听的是数据后台 'level': 'DEBUG', # 设置为 DEBUG 或更高的级别以捕获所有SQL查询 'handlers': ['console'], }, } } ``` 上述代码片段会将所有来自 `django.db.backends` 的日志消息打印到控制台[^2]。 #### 使用连接对象获取查询历史 除了通过日志机制外,还可以直接访问当前数据连接实例上的 `_queries` 属性来检索最近运行过的查询列表。需要注意的是该方法仅适用于开发环境下的调试用途;生产环境中不建议开启此类特性以免影响性能。 ```python from django.db import connection def view_queries(): print(connection.queries) # 输出自上次重置以来的所有查询 ``` 每次调用视图函数或其他逻辑单元之前记得清空之前的记录以便于分析新产生的请求: ```python connection.queries.clear() ``` 以上方式可以帮助理解应用层面对底层数据存储的操作细节, 对优化程序效率非常有帮助.
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值