Django之ORM执行原生sql语句
django中的ORM提供的操作功能有限,在模型提供的查询API不能满足实际工作需要时,可以在ORM中直接执行原生sql语句。
Django 提供两种方法使用原生SQL进行查询:一种是使用raw()方法,进行原生SQL查询并返回模型实例;另一种是完全避开模型层,直接执行自定义的SQL语句。
raw()方法执行原生sql语句:
raw()方法执行原生sql(调用的类名不区分是谁,只要存在均可执行)
ret=models.Book.objects.raw(‘select *** from book’)
#ret=models.Publish.objects.raw(‘select from app01_book’)
for book in ret:
print(book.book_name)
print(book.dict)
直接执行自定义原生sql语句:
直接执行自定义原生sql(完全避开模型层,类似******pymysql******操作)
(1)----------------------------------------------------------------------------------------------
from django.db import connection
cursor=connection.cursor()
cursor.execute(‘select *** from book’)
ret=cursor.fetchall()
(2)-----------------------------------------------------------------------------------------------
python使用pymysql操作数据库,速度太慢,已解决
使用python的pymysql操作数据库使发现,网页的加载速度特别慢,正常加载时间应该是零点几秒,可是用pymysql加载的速度高至十几秒,开始分析时,认为是图片,js,css …内存过大,然后用了“图床”,等技术之后发现没有变化,之后使用了,“删代码排除法”,一点一点的排除,结果发现是操作数据库的方法有问题,通过几小时的查询,发现,python,目前版本,有几种中操作数据库的方法,小编一种一种的尝试发现只要一种之后发现一个结论,和网上说的一样:“在 Python 3.6 下,pymysql 是最慢的,mysqlclient 很快,但是 mysql-connector-python 更快,但是到了 Python 3.7,反而比 pymysql 还慢”,声明:小编使用的是python3.6版本。以下是使用:mysql-connector-python 的一些执行案例:增删改查。
import mysql.connector
config = {
‘host’:‘39.106.150.87’,
‘database’:‘schedule2’,
‘port’:3306,
‘user’:‘root’,
‘password’:‘’,
‘charset’:‘utf8’,
‘use_pure’:True,
‘raise_on_warnings’: True,
}
cnn = mysql.connector.connect(**config)
cursor = cnn.cursor()
sql = “select * from {} where date >= ‘{}’;”.format(table_name, tomorrow)
cursor.execute(sql)
result = cursor.fetchall()
mysql数据库表清空后id如何从1开始自增
环境:
数据库:mysql
我们的数据库表中经常会使用id自增,但是每次清空表后id并不是从1开始计数,总是接着之前的进行自增,那么解决呢?
使用mysql的truncate命令,用法:truncate table 表名;
这样表的id自增就会变回从1开始自增了。
备注:该操作会清空您宝贵的数据库,我想题目已经说的够清楚了,请谨慎操作