django中配置mysql数据库
1 在django中安装pymysql
1.1 安装
pip install pymysql
pip list //查看安装的pymysql
1.2 创建app
python manage.py startapp app01
在setting 中添加app
在view中的代码
from django.http import HttpResponse
import pymysql
# Create your views here.
def index(request):
#python访问mysql流程
#1.打开数据库的连接对象
mysqldb=pymysql.connect("10.51.15.77","root","123456.Com","LibraryDB")
#2 为连接的对象创建一个游标
cursor= mysqldb.cursor()
#3.执行一个sql语句
sql ="select Version()"
cursor.execute(sql)
#获取执行的结果
data =cursor.fetchone()
#展示结果
return HttpResponse("Mysql的版本为:%s"%data)
添加路由
from app01 import views as app01_views
urlpatterns = [
path('admin/', admin.site.urls),
path("",app01_views.index)
]
在浏览器中查看 http://127.0.0.1:8000/
Mysql的版本为:5.7.29
1.2 pymysql使用的完善
-
在setting中的代码填写数据库信息(后期更改信息就在此处修改即可)
HOST ='10.51.15.77' USER ='root' PASSWORD ='123456.Com' DB ='LibraryDB'
-
在init中的代码—标准写法
import pymysql pymysql.install_as_MySQLdb()
-
在view中的代码
import pymysql from Dj020601.settings import *
-
导入mysqldb 标准的写法
import pymysql from Dj020601.settings import * #在函数模块中关联配置信息 mysqldb=pymysql.connect(HOST,USER,PASSWORD,DB)
-
在浏览器中预览
Mysql的版本为:5.7.29
1.3 数据库中表的创建
-
在之前创建表的基础之上执行,在views中新增函数create_table,写入相应的代码
def create_table(request): """ 创建表 :param request: :return: """ #创建一个数据库的连接 mysqldb=pymysql.connect(HOST,USER,PASSWORD,DB) #创建数据库连接的一个指针 cursor =mysqldb.cursor() #准备sql语句 sql =""" Create table Student( SNO int , Sname varchar(20) NOT NULL , Gender varchar(20) NOT NULL, Birthday date , Mobile varchar (20), Email varchar(200), Address varchar(200), CONSTRAINT PK_SNO PRIMARY KEY (SNO), CONSTRAINT UQ_Mobile UNIQUE (Mobile), CONSTRAINT UQ_Email UNIQUE (Email) ) """ #执行 try: cursor.execute(sql) #如果没问题 ,提交 mysqldb.commit() return HttpResponse("创建表成功!") except Exception as e: return HttpResponse("创建表出现异常,具体原因:"+str(e)) #关闭连接 finally: mysqldb.close()
-
在url中新增一条路由 其他都不动,包括之前在view中创建的代码,否则都无法执行
path("createtable",app01_views.create_table)
-
浏览器访问 http://127.0.0.1:8000/createtable
创建表成功!
1.4 在django中引入读取文本文件插入数据库(非常重要!!!)
- 创建静态文件
将student.txt文本文件放在static下,然后在setting中配置加载静态文件
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-RNVGhLrl-1591978368409)(D:%5CPython%5CProject%5Cmarkdownimage%5Cdjangodriver%5C1.png)]
-
setting中加载静态文件 (一定要注意一个单词不能写错)
STATICFILES_DIRS=[ os.path.join(BASE_DIR,'static'), ]
-
在view中新增读取文件模块和插入数据库模块
读取文件:
def read_student_from_file(path:str): """ 从文件中读取学生信息 数据如下: [{}{}{}{}{}] :return: """ # 定义集合存储数据 students = [] infos = ['sno', 'name', 'gender', 'birthday', 'mobile', 'email', 'address'] # 读取 try: with open(path, mode='r', encoding='utf-8-sig') as fd: current_line = fd.readline() while current_line: # 切分属性信息 student = current_line.strip().replace("\n","").split(",") # 定义临时集合 temp_student = {} for index in range(len(infos)): temp_student[infos[index]] = student[index] # 附加到集合中 students.append(temp_student) # 读取下一行 current_line = fd.readline() # 返回 return students except Exception as e: print("读取文件出现异常,具体为:" + str(e))
插入数据:
def insert02(request): """ 批量导入数据 :param request: :return: """ path =r"D:\Python\Project\Dj020601\static\Student.txt" students =read_student_from_file(path) mysqldb =pymysql.connect(HOST,USER,PASSWORD,DB) cursor =mysqldb.cursor() #遍历集合 for student in students: #准备sql语句 sql =" INSERT INTO Student(SNO,SName,Gender,Birthday,Mobile,Email,Address) VALUES" \ "(%s,'%s','%s','%s','%s','%s','%s')" % (student['sno'],student['name'],student['gender'],student['birthday'], student['mobile'],student['email'],student['address']) #执行'sno', 'name', 'gender', 'birthday', 'mobile', 'email', 'address' try: cursor.execute(sql) mysqldb.commit() except Exception as e: mysqldb.rollback() return HttpResponse("数据插入失败!具体原因+"+str(e)) return HttpResponse("读取文件写入到数据库已完成")
-
配置路由
path("insert02/",app01_views.insert02)
-
浏览器加载 运行
-
对读取学生信息特殊说明
#读取学生信息 def read_student_info(path:str): #定义一个存储信息的列表 students=[] #定义一个访问的集合 infos =['sno', 'name', 'gender', 'birthday', 'mobile', 'email', 'address'] #开始读取文件 try: #创建一个读取文件连接 with open(path,mode='r',encoding='utf-8-sig') as fd: #读取第一行 current_line =fd.readline() while current_line: #将读取到的信息进行切割 student=current_line.strip().replace('\n','').split(',') temp_list ={} #对切割好的数据进行封装 for index in range(len(infos)): #对读取到的一行数据通过字典进行添加数值 temp_list[infos[index]]=student[index] students.append(temp_list) current_line=fd.readline() return students except Exception as e: print("系统出现异常,详情"+str(e)) if __name__ == '__main__': path='D:\Python\Project\Dj020601\static\Student.txt' #txt文本存放的路劲 print(read_student_info(path))
1.5 django中更新or删除数据
- 在view中增加或者删除数据库中的信息
def update(request): #修改数据
"""
修改记录
:param request:
:return:
"""
#创建一个数据库连接
mysqldb=pymysql.connect(HOST,USER,PASSWORD,DB)
#创建一个数据库连接的指针
cursor =mysqldb.cursor()
#创建一个数据库连接的操作指引
#准备sql语句
sql="""
update Student set Birthday="1998-09-08" where SNO=95001
"""
#执行
try:
#执行sql语句
cursor.execute(sql)
#提交到mysql数据库
mysqldb.commit()
#给用户反馈
return HttpResponse("修改成功!")
except Exception as e:
#回滚
mysqldb.rollback()
#给用户提示
return HttpResponse("修改失败,具体原因是"+str(e))
finally:
mysqldb.close()
def delete(request): #删除数据
#创建一个数据库连接
mysqldb=pymysql.connect(HOST,USER,PASSWORD,DB)
#创建一个指针
cursor =mysqldb.cursor()
# 准备要执行的代码
sql = """
delete from Student where SNO='95002'
"""
try:
#执行sql语句
cursor.execute(sql)
#提交到mysql数据库
mysqldb.commit()
#给用户一个反馈
return HttpResponse("删除数据成功!")
except Exception as e:
#回滚,这个参考视图文档
mysqldb.rollback()
return HttpResponse("提交失败,详情"+str(e))
finally:
#关闭连接--每一次都要做
mysqldb.close()
#执行
-
在url中配置路由
path("update/",app01_views.update), path("delete/",app01_views.delete),
-
在浏览器中访问即可,页面自动提示修改或者删除数据成功
1.6 查询表中的数据 (两种方式)
方式1 (获取多条) | 方式2(获取一条) |
---|---|
Fetchall | Fetchone |
-
多条查询
def select_all(request): #实例化一个数据库连接 mysqldb=pymysql.connect(HOST,USER,PASSWORD,DB) #为连接创建一个操作指针 cursor =mysqldb.cursor() #准备sql语句 sql =""" select SNO,SName,Gender,Birthday,Mobile,Email,Address from Student where SNO>95008 """ #执行 try: #执行 cursor.execute(sql) #获取执行的结果 students=cursor.fetchall() #返回页面 return HttpResponse(str(students)) #返回数据是一个元组 except Exception as e: return HttpResponse("获取数据失败,具体原因"+str(e)) finally: mysqldb.close()#无论成功,都要执行!
2. 查询一条
def select_one(request):
# 实例化一个数据库连接
mysqldb = pymysql.connect(HOST, USER, PASSWORD, DB)
# 为连接创建一个操作指针
cursor = mysqldb.cursor()
# 准备sql语句
sql = """
select SNO,SName,Gender,Birthday,Mobile,Email,Address from Student where SNO=95001
"""
# 执行
try:
# 执行
cursor.execute(sql)
# 获取执行的结果
student = cursor.fetchone()
# 返回页面
return HttpResponse(str(student)) #返回数据是一个元组
except Exception as e:
return HttpResponse("获取数据失败,具体原因" + str(e))
finally:
mysqldb.close() # 无论成功,都要执行!