当前位置 : 主页 > 编程语言 > java >

Python、Django、Mysql详细搭建开发,model操作数据库以及执行原生SQL

来源:互联网 收集:自由互联 发布时间:2022-09-02
1.搭建Django开发环境 1 .安装python(版本3.5.1) 官网下载:https://www.python.org/downloads/release/python-351/ 2 .更新pip 命令:python -m pip install --upgrade pip 3 .使用pip安装virtualenv 命令:pip install virt


1.搭建Django开发环境

1.安装python(版本3.5.1)
  官网下载:https://www.python.org/downloads/release/python-351/
2.更新pip
  命令:python -m pip install --upgrade pip
3.使用pip安装virtualenv
  命令:pip install virtualenv 如需指定版本 pip install virtualenv==15.0.1
4.创建虚拟环境
  命令:virtualenv xiaol_django_env
  执行后输出:
    Using base prefix 'f:\\python\\python35'
    New python executable in C:\Users\Administrator\xiaol_django_env\Scripts\python.exe
    Installing setuptools, pip, wheel...done.
  这里C:\Users\Administrator\xiaol_django_env\Scripts\python.exe即为虚拟环境的位置
5.使用虚拟环境
  命令:进入C:\Users\Administrator\xiaol_django_env\Scripts目录下执行activate命令
  执行后输出:(xiaol_django_env) C:\Users\Administrator\xiaol_django_env\Scripts>代表成功
6.在虚拟环境中安装django
  命令:pip install django 如需指定版本 pip install django==1.9.5
7.在虚拟环境中安装pymsql(连接数据库的驱动)
  命令:pip install pymsql 如需指定版本 pip install pymsql==0.7.10
8.在虚拟环境中查看安装是否完成
  命令:pip freeze(查看都安装了什么东西)
  结果:
    Django==1.9.5
    PyMySQL==0.7.10
9.退出虚拟环境
  命令: deactivite
10.查看真实环境安装情况
  命令:pip freeze
  结果:
    virtualenv==15.0.1

备注:虚拟环境只是为在开发的时候不打乱本地环境的干净

至此安装完成。

2.Django命令行工具搭建项目(django-admin.py & manage.py)

1.概念:

  django-admin.py是django的用于管理任务的命令行工具
  manage.py是对django-admin.py的简单包装,每个project里会有一个自己的manage.py



2.查看帮助:

查找django-admin.py在什么地方:
  命令:where django-admin.py
  输出:C:\Users\Administrator\xiaol_django_env\Scripts\django-admin.py

查看django-admin.py帮助:
  命令:django-admin.py help

查看django-admin.py具体参数的帮助:
  命令:django-admin.py help 参数,比如django-admin.py help startproject



3.使用django-admin创建项目(最简单的项目,什么都不配置,只是创建启动访问):
  1.在本地创建一个存放项目的文件夹,比如E:\code\django
  2.在命令行将当前路径切换到E:\code\django目录
    命令:cd E:\code\django
  3.创建django项目(名称hello_django)
    命令:django-admin.py startproject hello_django
    输出:控制台没有任何输出,在e:\code\django里会创建hello_django文件夹
  4.进入hello_django文件夹创建app(名称hello)
    命令: cd hello_django
        django-admin.py startapp hello
    输出:控制台没有任何输出,在hello_django里会创建hello文件夹

  5.在hello_django文件夹中启动项目

    命令:manage.py runserver  

    6.访问http://127.0.0.1:8000地址

   

4.使用manage.py管理django后台:

    1.在上步中,已经可以成功启动django项目了(hello_django),django还自带了一个管理后台,地址:http://localhost:8000/admin

    2.但是此时是没有办法登录的,因为用户还没有创建,所以需要用manage.py去做这件事

      a.停止服务(由于是我是接着上面做的,这里记录了所有的操作,如果服务没起就不用停止了)

      b.同步django数据库:

        命令:manage.py makemigrations (创建脚本)

           manage.py migrate (执行脚本)

3.写一个hello world页面

1.在app模块中添加页面

  具体为 hello_django\hello\views.py 中添加

2.在setting文件中加入对hello这个app的管理

  具体为 hello_django\hello_django\settings.py 中修改

3.在urls文件中加入对这个页面的映射关系

  具体为 \hello_django\hello_django\urls.py 中修改

4. 启动访问 http://localhost:8000/hello/

4.对urls.py的解释

\hello_django\setting.py中通过ROOT_URLCONF配置,如ROOT_URLCONF = 'hello_django.urls'(默认配置)

理解:

  相当于spring mvc里的@RequestMapping的作用

基本语法:

  urlpatterns = [
    url(正则表达式, view函数, 参数, 别名, 前缀),
  ]



用法一(不带参数):

  from django.contrib import admin
  urlpatterns = [
    # url(r'^hello/', views.hello),
  ]

用法二(不带参数):
  urlpatterns = [
    url(r'^hello/', 'hello.views.hello'),
  ]





备注:用法一和用法二是一样的,但是方法二在1.9版本后将不再推荐使用,被标记为过时



用法三(带参数):
  urlpatterns = [
    url(r'^hello/', 'hello.views.hello', {'name':'zhangsan'}),
  ]

  相应的,view里去接收这个参数,修改为:



关于正则表达式:

  1.定义url访问路径:

    urlpatterns = [

      url(r'^hello/\d{2}', views.hello),
    ]

  访问的时候必须在hello后面带个两位数:http://localhost:8000/hello/22



  2.传递url参数:

    urlpatterns = [

      url(r'^hello/(?P<id>\d{2})', views.hello),
    ]

  意思是:在hello后面带个两位数字,并且,这个两位数字被作为参数传进去,参数名是id

  相应的,view里去接收这个参数,修改为:

  

  



以下英文为urls.py文件自带的注释,里面的三个例子值得看

The `urlpatterns` list routes URLs to views. For more information please see:https://docs.djangoproject.com/en/1.9/topics/http/urls/
Examples:
  Function views
    1. Add an import: from my_app import views
    2. Add a URL to urlpatterns: url(r'^$', views.home, name='home')
  Class-based views
    1. Add an import: from other_app.views import Home
    2. Add a URL to urlpatterns: url(r'^$', Home.as_view(), name='home')
  Including another URLconf
    1. Import the include() function: from django.conf.urls import url, include
    2. Add a URL to urlpatterns: url(r'^blog/', include('blog.urls'))
5.Django数据库配置
Django默认支持sqlite、mysql、oracle、postgresql数据库,像db2和sqlserver需要安装第三方的支持



配置Django数据库:\hello_django\hello_django\settings.py 文件中的 DATABASES



使用django-admin.py创建的新项目中,会默认使用sqlite数据库,默认配置如下

  



我们这里使用mysql数据库:

  引擎:

    django.db.backends.mysql
  常用驱动程序:

    MySQLdb(mysql-python):

          特点:只支持到python2对3支持不好

          网址:https://pypi.python.org/pypi/MySQL-python/1.2.5

    mysqlclient:

          特点:MySQLdb的一个分支,它支持3

          网址:https://pypi.python.org/pypi/mysqlclient

    PyMySQL:

          特点:纯python的mysql驱动

          网址:https://pypi.python.org/pypi/PyMySQL


  驱动选择PyMySQL原因:纯python写的,不需要依赖别的东西,比如c++什么的





使用步骤:
  1.安装驱动(已经在第一篇中安装过了)
  2.改配置

    

  3.建立数据库(hello_django_db),django不会帮你创建库,否则启动报错:Unknown database 'hello_django_db

  4.修改\hello_django\hello_django\__init__.py文件,加入如下代码:

    

   否则启动报:ImportError: No module named 'MySQLdb'

   原因:Django默认会找MySQLdb



  5.同步数据库的表

    manage.py makemigrations (创建脚本)

    manage.py migrate  (执行脚本)

1.使用extra方法

解释:结果集修改器,一种提供额外查询参数的机制

说明:依赖model模型

用在where后:

Book.objects.filter(publisher_id=“1”).extra(where=[“title=‘python学习1’”])

用在select后

Book.objects.filter(publisher_id=“1”).extra(select={“count”:“select count(*) from hello_book”})

2.使用raw方法

解释:执行原始sql并返回模型

说明:依赖model多用于查询

用法:

= Book.objects.raw("select * from hello_book")
    for item in book:
      print(item.title)

3.执行自定义SQL

解释:利用游标执行

导入:from django.db import connection

说明:不依赖model

用法:

from django.db import connection

    cursor = connection.cursor()
    #插入
    cursor.execute("insert into hello_author(name) values('xiaol')")
    #更新
    cursor.execute("update hello_author set name='xiaol' where id=1")
    #删除
    cursor.execute("delete from hello_author where name='xiaol'")
    #查询
    cursor.execute("select * from hello_author")
    #返回一行
    raw = cursor.fetchone()
    print(raw)
    # #返回所有
    # cursor.fetchall()


网友评论