zoukankan      html  css  js  c++  java
  • python测试开发django-10.django连接mysql

    前言

    Django 对各种数据库提供了很好的支持,包括:PostgreSQL、MySQL、SQLite、Oracle。本篇以mysql为例简单介绍django连接mysql进行数据操作
    Django连mysql需要安装驱动mysqlclient

    mysqlclient安装

    先要安装数据库驱动mysqlclient,使用pip安装就行

    pip install mysqlclient

       copying MySQLdbconstantsFLAG.py -> buildlib.win-amd64-3.6MySQLdbconstants
        copying MySQLdbconstantsREFRESH.py -> buildlib.win-amd64-3.6MySQLdbconstants
        running build_ext
        building '_mysql' extension
        error: Microsoft Visual C++ 14.0 is required. Get it with "Microsoft Visual C++ Build Tools": http://landinghub.visualstudio.com/visual-cpp-build-tools
    
        ----------------------------------------
    Command "e:python36python.exe -u -c "import setuptools, tokenize;__file__='C:\Users\dell\AppData\Local\Temp\pip-install-trc0p4gc\mysqlclient\setup.py';f=getattr(tokenize, 'open', open)(__file__);code=f.read().replace('
    ', '
    ');f.close();exec(compile(code, __file__, 'exec'))" install --record C:UsersdellAppDataLocalTemppip-record-ulwogpctinstall-record.txt --single-version-externally-managed --compile" failed with error code 1 in C:UsersdellAppDataLocalTemppip-install-trc0p4gcmysqlclient
    

    这里我安装的时候出现了报错:“Microsoft Visual C++ 14.0 is required. Get it with "Microsoft Visual C++ Build Tools": http://landinghub.visualstudio.com/visual-cpp-build-tools” 打开报错给的地址404

    解决办法,指定1.3.10版本安装

    pip install mysqlclient==1.3.10

    C:Usersdell>pip install mysqlclient==1.3.10
    Collecting mysqlclient==1.3.10
      Downloading https://files.pythonhosted.org/packages/c8/e0/e38c1fc71355bbc60e89401674bc0190f39a207f0235bb92b7e7b09948d0/mysqlclient-1.3.10-cp36-cp36m-win_amd64.whl (1.4MB)
        100% |████████████████████████████████| 1.4MB 466kB/s
    Installing collected packages: mysqlclient
    Successfully installed mysqlclient-1.3.10
    

    django配置数据库

    settings.py 文件中找到 DATABASES 配置项, django默认连接sqllite。ENGINE:是指连接数据库驱动的名称,有以下几种情况:

    • django.db.backends.postgresql 连接 PostgreSQL
    • django.db.backends.mysql 连接 mysql
    • django.db.backends.sqlite3 连接 sqlite
    • django.db.backends.oracle 连接 oracle

    这里我们连接mysql需要账户密码,也就是之前安装mysql的root用户名,和自己设置的密码,NAME是数据库的名称,连接配置如下:

    DATABASES = {
        'default': {
            'ENGINE': 'django.db.backends.mysql',  # 或者使用 mysql.connector.django
            'NAME': 'test',
            'USER': 'root',
            'PASSWORD': 'yoyo',
            'HOST':'localhost',
            'PORT':'3306',
        }
    }
    

    创建表,同步到mysql

    类名代表了数据库表名,且继承了models.Model,类里面的字段代表数据表中的字段(name),数据类型则由CharField(相当于varchar)、DateField(相当于datetime), max_length 参数限定长度。

    # models.py
    
    from django.db import models
    
    # Create your models here.
    
    class Test(models.Model):
        name = models.CharField(max_length=20)
    

    先创建表结构,在数据库里面新增一些表

    python manage.py migrate

    D:web_djohelloworld>python manage.py migrate
    Operations to perform:
      Apply all migrations: admin, auth, contenttypes, hello, sessions
    Running migrations:
      Applying contenttypes.0001_initial... OK
      Applying auth.0001_initial... OK
      Applying admin.0001_initial... OK
      Applying admin.0002_logentry_remove_auto_add... OK
      Applying admin.0003_logentry_add_action_flag_choices... OK
      Applying contenttypes.0002_remove_content_type_name... OK
      Applying auth.0002_alter_permission_name_max_length... OK
      Applying auth.0003_alter_user_email_max_length... OK
      Applying auth.0004_alter_user_username_opts... OK
      Applying auth.0005_alter_user_last_login_null... OK
      Applying auth.0006_require_contenttypes_0002... OK
      Applying auth.0007_alter_validators_add_error_messages... OK
      Applying auth.0008_alter_user_username_max_length... OK
      Applying auth.0009_alter_user_last_name_max_length... OK
      Applying hello.0001_initial... OK
      Applying hello.0002_auto_20181122_1025... OK
      Applying hello.0003_auto_20181122_1033... OK
      Applying sessions.0001_initial... OK
    

    打开数据库,会发现多了一些表名称,hello_test就是上一步新建的表

    接着让 Django 知道我们在我们的模型有一些变更

    python manage.py makemigrations hello

    D:web_djohelloworld>python manage.py makemigrations hello
    No changes detected in app 'hello'
    

    再创建hello这个app应用的表结构

    python manage.py migrate hello

    D:web_djohelloworld>python manage.py migrate hello
    Operations to perform:
      Apply all migrations: hello
    Running migrations:
      No migrations to apply.
    

    操作数据库

    在settings.py同一目录新建一个testdb.py文件

    # -*- coding: utf-8 -*-
    
    from django.http import HttpResponse
    
    from hello.models import Test
    
    # 数据库操作
    def testdb(request):
        test1 = Test(name='yoyo1')
        test1.save()
        return HttpResponse("数据库hello_test添加name成功!看去看看吧")
    

    urls.py配置访问地址

    from django.conf.urls import url
    from django.urls import re_path, path
    from . import view, testdb
    
    urlpatterns = [
        url(r'^testdb$', testdb.testdb),
    ]
    

    浏览器打开:http://127.0.0.1:8000/testdb 访问一次,数据库里面就会新增一条数据

    查看数据库hello_test会新增数据

    django交流QQ群:779429633

  • 相关阅读:
    表表达式,Substring, CharIndex, 多行数据变同一行的用法
    武汉三首,记录备忘,写的不好,以后再改
    竟然又有两年没有码字发帖了,真是快长草了,打磨一下,克服拖延症,重新回归,重新写起!
    屈指一算,竟然有一年半没有发帖了,真是时光荏苒,白云苍狗!
    下雨有感
    (ETW) Event Trace for Windows 提高 (含pdf下载)
    (ETW) Event Tracing for Windows 入门 (含pdf下载)
    Requirejs加载超时问题的一个解决方法:设置waitSeconds=0
    如何通过Socket TCP发送并接收一个文件?
    Microsoft.VisualBasic.DateAndTime.Timer 与 DateTime.Now.TimeOfDay.TotalSeconds 相当
  • 原文地址:https://www.cnblogs.com/yoyoketang/p/9997520.html
Copyright © 2011-2022 走看看