django mysql sql语句_Django笔记:连接数据库并执行SQL语句
Django中安装好数据库和对应的数据库驱动之后,就可以直接执行SQL语句进行数据库和表的创建,以及数据的增删改查等操作,在Python3中,可以使用的数据库和驱动有多种,我这里使用的是MySQL数据库,对应的驱动使用的是mysqlclient,安装时直接使用pip install mysqlclient安装即可。
一、MySQL数据库驱动
对于Python中使用的MySQL驱动,以下几种可以参考下:
MySQL-python:也就是MySQLdb,是对c语言操作MySQL数据库的一个简单封装,遵循了Python DB API v2,但是,这个驱动只支持Python2,不支持Python3。
mysqlclient:是MySQL-python的另外一个分支,支持Python3,并修复了一些bug。
pymysql:纯Python实现的一个驱动。当然,因为是纯Python编写的,所以执行效率不如MySQL-python(包括mysqlclient),但是也正因为是纯Python编写的,因此可以和Python代码无缝衔接。
MySQL Connector/Python:MySQL官方推出的使用纯Python连接MySQL的驱动,因为是纯Python编写的,因此和pymysql也有同样的问题,即执行效率不如MySQL-python(包括mysqlclient)。
二、连接数据库
安装好MySQL数据库及其驱动后,只需要在项目主app的settings.py中修改配置项DATABASES的default项信息即可,之后运行Django项目时就可以自动连接数据库了。具体配置方法参考示例:
DATABASES = {
'default': {
# 数据库引擎
'ENGINE': 'django.db.backends.mysql',
# 数据库名称
'NAME': 'django_db1',
# 用户名
'USER': 'root',
# 密码
'PASSWORD': '123456',
# 数据库所在的主机IP(本机就是127.0.0.1)
'HOST': '127.0.0.1',
# 数据库使用的端口号(MySQL默认端口号就是3306)
'PORT': '3306'
}
}
三、执行SQL语句
Django中有两种方式来操作数据库,一种是通过ORM模型,另一种就是直接执行SQL语句,这里讲一下直接执行SQL的方式。
直接执行SQL的方式需要用到from django.db import connection,并通过connection.cursor()方法获取到数据库的游标对象,然后使用游标对象的方法来执行对应的SQL即可。直接执行SQL的这种方式遵循Python DB API的规范,而对于遵循这个规范的数据库驱动来说,它们使用的方法都是一样的,不同之处在于方法内部的实现原理,比如execute、fetchall等方法,这些方法不只是Django中才有,只要是遵循Python DB API规范实现的驱动都会有这些方法,只是各自的实现原理不同而已。这个规范具体有哪些方法,可以参考Python官方文档Python DB API,这里列举一些常用的方法:
description:如果cursor执行了查询的SQL,那么cursor.description将返回一个列表,列表中的元素为元组(name, type_code, display_size, internal_size, precision, scale, null_ok)。
rowcount:表示执行了SQL后受影响的行数。
close:关闭游标。
execute(sql[, parameters]):执行SQL。执行SQL的时候如果需要传递参数,则可以使用parameters参数,例如cursor.execute("select * from article where id=%s", (1, ))。当然,也可以先将SQL字符串构造好后直接传入。
fetchone:在执行了查询操作后,获取查询结果的第一条数据。
fetchmany(size):在执行了查询操作后,获取指定条数的数据,如果不指定size参数,则默认获取第一条数据。
fetchall:获取所有SQL执行结果。
示例:通过SQL的方式操作数据库
from django.shortcuts import render
from django.db import connection
def index(request):
# 创建获取游标对象
cursor = connection.cursor()
# 使用游标对象的execute方法执行一条SQL语句
# cursor.execute("insert into book(id, name, author) values(null, '了不起的盖茨比', '弗朗西斯·斯科特·基·菲茨杰拉德')")
cursor.execute("select id, name, author from book")
# 如果执行的查询的SQL,则可以指定方法获取查询的结果
# fetchall方法获取所有的查询结果
rows = cursor.fetchall()
for row in rows:
print(row)
return render(request, 'index.html')
注:本文为学习笔记,发现错误欢迎指出。
django mysql sql语句_Django笔记:连接数据库并执行SQL语句相关推荐
- php导入sql文件到数据库中,PHP执行SQL文件并将SQL文件导入到数据库
//读取文件内容$_sql = file_get_contents("test.sql");$_arr = explode(";", $_sql);$_mysq ...
- 左外连接的sql语句_Django数据库连接和使用原生sql语句
在操作数据库之前,首先先要连接数据库.这里我们以配置 MySQL 为例来讲解. Django连接数据库,不需要单独的创建一个连接对象.只需要在 settings.py 文件中做好数据库相关的配置就可以 ...
- mysql query语句_使用mysql_query()函数执行SQL语句
mysql_query()函数 PHP MySQL 函数库中,mysql_query() 函数用于向 MySQL 发送并执行 SQL 语句. 对于没有数据返回结果集的 SQL ,如 UPDATE.DE ...
- mysql函数 动态语句_自定义函数动态执行SQL语句
Oracle 动态SQL有两种写法:用 DBMS_SQL 或 execute immediate,建议使用后者. DDL 和 DML Sql代码 收藏代码 /*** DDL ***/ begin EX ...
- ef 执行mysql语句_在EF中执行SQL语句
一.为什么要在EF中执行SQL语句 使用EF操作数据库,可以避免写SQL语句,完成使用Linq实现,但为什么还要在EF中执行SQL语句呢.如果要写SQL语句,完全可以使用ADO.NET来操作数据库.这 ...
- 【PL/SQL】 学习笔记 (3)if 语句使用
1 /* 2 判断用户从键盘输入的数字 3 1.如何使用if语句: 4 2.接收一个键盘输入(字符串); 5 */ 6 7 set SERVEROUTPUT ON 8 --接收一个键盘输入 9 --n ...
- mysql当执行delete语句时备份_mysql中,执行delete语句时出现Lock wait timeout exceeded问题...
问题描述: 当我插入一条记录时,在调用save方法的时候出现了异常(记录重复了),导致了后面的commit语句不能执行了.这时我在数据库中删除重复记录时发现该表已经被锁上了.即出现 错误.但过了一会再 ...
- concat mysql sql注入_Mysql中用concat函数执行SQL注入查询的方法
Mysql数据库使用concat函数执行SQL注入查询 SQL注入语句有时候会使用替换查询技术,就是让原有的查询语句查不到结果出错,而让自己构造的查询语句执行,并把执行结果代替原有查询语句查询结果显示 ...
- python 执行sql语句_python中脚本怎么执行sql语句?
python连接mysql并执行SQL语句的方法步骤: 1.创建与数据库连接对象 2.建立游标对象 3.利用游标对象 执行SQL语句命令 4.#提交到数据库 5.关闭游标对象 6.关闭数据库连接 7. ...
最新文章
- Keil μVision 5版新建工程详细步骤(版本2)
- Flask上传文件到本地(底层方法实现)。
- 一分钟了解阿里云产品:阿里云解析五大热点技术问题分析
- 颠覆农业思维-国际农民丰收节贸易会·万祥军:大粮食概念
- HDU 1540 Tunnel Warfare
- 俄语使用计算机怎么说,计算机俄语常用词汇
- BCC异或校验 Linux C
- 计算机网络项目——最小网元设计(阶段四)
- 自定义动画属性java_创建酷炫动画效果的10个JavaScript库
- 安卓案例:绑定和解绑服务
- 在JS/jQuery中,怎么触发input的keypress/keydown/keyup事件?
- Python+tkinter实现验证码输入和切换
- vue-cli 基本原理
- 创建可扩展性系统-13-2
- PXE(preboot execute environment)
- 单网卡、单IP、双网关设置内外网同时访问
- openStack cluster chk
- 基于Vue.js的Web视频播放器插件vue-vam-video@1.3.6 正式发布
- 输入文字后不会自动变长的下划线如何制作
- idea+win10+chrome+jAceJump的快捷键使用
热门文章
- 全连接网络实现Fashion数据集学习/预测
- 【计算机网络】第六部分 应用层(26) 远程登录、电子邮件与文件传输
- TCP拥塞控制算法-从BIC到CUBIC
- css cubic-bezier,使用cubic-bezier()创建带有反弹特效的CSS动画
- 毕业后第二份工作:进军外企 赴新加坡工作 月薪18K
- 不能不用也不可乱用的标准化和归一化处理
- 计算机应用word单元测试2,(计算机应用基本技能测试二.doc
- javafx 教程_JavaFX,Jigsaw项目和JEP 253
- 如何一键制作DTS Audio DVD、AC3 Audio DVD、WAV Audio DVD纯音乐碟片
- BK7256,Wi-Fi6音视频soc-combo芯片,上海博通-内置Flash,支持720P