2.django中驱动数据库

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使用的完善

  1. 在setting中的代码填写数据库信息(后期更改信息就在此处修改即可)

    HOST ='10.51.15.77'
    USER ='root'
    PASSWORD ='123456.Com'
    DB ='LibraryDB'
    
  2. 在init中的代码—标准写法

    import  pymysql
    pymysql.install_as_MySQLdb()
    
  3. 在view中的代码

    import  pymysql
    from Dj020601.settings import *
    
  4. 导入mysqldb 标准的写法

    import  pymysql
    from Dj020601.settings import *
    #在函数模块中关联配置信息
          mysqldb=pymysql.connect(HOST,USER,PASSWORD,DB)
    
  5. 在浏览器中预览

    Mysql的版本为:5.7.29

1.3 数据库中表的创建

  1. 在之前创建表的基础之上执行,在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()
    
  2. 在url中新增一条路由 其他都不动,包括之前在view中创建的代码,否则都无法执行

    path("createtable",app01_views.create_table)
    
  3. 浏览器访问 http://127.0.0.1:8000/createtable

    创建表成功!

1.4 在django中引入读取文本文件插入数据库(非常重要!!!)

  1. 创建静态文件

​ 将student.txt文本文件放在static下,然后在setting中配置加载静态文件

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-RNVGhLrl-1591978368409)(D:%5CPython%5CProject%5Cmarkdownimage%5Cdjangodriver%5C1.png)]

  1. setting中加载静态文件 (一定要注意一个单词不能写错)

    STATICFILES_DIRS=[
        os.path.join(BASE_DIR,'static'),
    ]
    
  2. 在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("读取文件写入到数据库已完成")
        
    
  3. 配置路由

     path("insert02/",app01_views.insert02)
    
  4. 浏览器加载 运行

  5. 对读取学生信息特殊说明

    #读取学生信息
    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删除数据

  1. 在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()
        #执行
  1. 在url中配置路由

    path("update/",app01_views.update),
    path("delete/",app01_views.delete),
    
  2. 在浏览器中访问即可,页面自动提示修改或者删除数据成功

1.6 查询表中的数据 (两种方式)

方式1 (获取多条)方式2(获取一条)
FetchallFetchone
  1. 多条查询

    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()  # 无论成功,都要执行!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值