Django使用pymysql作为MySQL驱动

唉,最近赶了个新潮,用起了Python3.4跟Django1.6,数据库依然是互联网企业常见的MySql。

悲催的是在Python2.7时代连接MySql的MySQLdb还不支持Python3.4,还好,苦苦追问G哥终于找到一款代替品,而且效果不错,这代替品就是:pymysql。

下载此物然后进行安装,跟其它python第三包没任何区别,一样的安装。

关于Django1.6中DATABASES的设置也是一样不用做任何修改,跟以前MySQLdb的时候一样,如下所示:

DATABASES = {
     'default': {
         'ENGINE': 'django.db.backends.mysql', #数据库引擎
         'NAME': 'test',                       #数据库名
         'USER': 'root',                       #用户名
         'PASSWORD': 'root',                   #密码
         'HOST': '',                           #数据库主机,默认为localhost
         'PORT': '',                           #数据库端口,MySQL默认为3306
         'OPTIONS': {
             'autocommit': True,
         },
     }
 }

最关键的一点,在站点的_init_.py文件中,我们添加如下代码:

import pymysql
pymysql.install_as_MySQLdb()

做完上述动作后,即可在django中访问mysql了。

==================================================

环境:Python 3.5+, Django 1.9+

最初用django时,搜索时发现PyMySQL的文章很多,然而在django的官方文档中python3版的mysql客户端驱动确没有提到PyMySQL,只提到了mysqlclient,再细看下去发现:

  1. 两个库的作者是同一个人INADA Naoki, pip库邮箱都指向mailto:[email protected]

  2. PyMySQL的代码人员methane说mysqlclient速度更快及PyMySQL的应用场景,参见:https://github.com/PyMySQL/PyMySQL/issues/342

    mysqlclient-python is much faster than PyMySQL.
    When to use PyMySQL is:

You can’t use libmysqlclient for some reason
You want to use monkeypatched socket of gevent or eventlet
You wan’t to hack mysql protocol
3. Django1.9.12官方文档中:

Django requires mysqlclient 1.3.3 or later. Note that Python 3.2 is not supported. Except for the Python 3.3+ support,
mysqlclient should mostly behave the same as MySQLDB.

  1. https://python.libhunt.com/project/mysqlclient-python/vs/pymysql 两者基本面的对比

经上对比,准备先用mysqlclient!

–10+年电商技术,5年跨境运营。技术+商业思维+资源分享交流,选择比努力更重要!

==================================================================

再来一个:::

创建数据库
create database haha default charset=utf8;
安装pymysql

pip install PyMySQL
应用中的setting.py设置如下

import pymysql ##setting.py设置
pymysql.install_as_MySQLdb()  ##setting.py设置
DATABASES = {
    'default': {
    'ENGINE': 'django.db.backends.mysql',
    'NAME': 'mysite',
    'USER': 'root',
    'PASSWORD': '123456',
    'HOST': '127.0.0.1',
    'PORT': '3306',
    }
}
在C:\Users\Administrator\AppData\Local\Programs\Python\Python35\lib\site-packages\django\db\backends\mysql\base.py把下面的内容注释掉

if version < (1, 3, 3):
     raise ImproperlyConfigured("mysqlclient 1.3.3 or newer is required; you have %s" % Database.__version__)





创建模型

from django.db import models

class Post(models.Model):
    title = models.CharField('标题', max_length=70)

    def __str__(self):
        return self.title
迁移模型

python manage.py makemigrations
python manage.py migrate

===================================================================
这是一个简单的流程,建立一个项目,新建一个app,同步到数据库中:::

::

django 连接mysql 数据库
1、新建一个mysite项目:django-admin startproject mysite

2、进入项目目录,新建一个app : python manage.py startapp polls

3、安装mysqlclient :pip install mysqlclient

4、在settings.py database中设置数据库连接配置

DATABASES = {
‘default’: {
‘ENGINE’: ‘django.db.backends.mysql’,
‘NAME’: ‘my_web’,
‘USER’: ‘root’,
‘PASSWORD’: ‘password’,
‘HOST’: ‘127.0.0.1’,
‘PORT’: ‘3306’,
}
}
5、执行命令: python manage.py migrate

在数据库中自动创建web系统使用到的表

6、编辑polls/models.py文件内容

复制代码
from django.db import models

class Question(models.Model):
question_text = models.CharField(max_length=200)
pub_date = models.DateTimeField(‘date published’)

class Choice(models.Model):
question = models.ForeignKey(Question, on_delete=models.CASCADE)
choice_text = models.CharField(max_length=200)
votes = models.IntegerField(default=0)
复制代码

7、修改mysite/settings.py 文件INSTALLED_APPS 添加 ‘polls.apps.PollsConfig’,

INSTALLED_APPS = [
‘polls.apps.PollsConfig’,
‘django.contrib.admin’,
‘django.contrib.auth’,
‘django.contrib.contenttypes’,
‘django.contrib.sessions’,
‘django.contrib.messages’,
‘django.contrib.staticfiles’,
]

7、执行命令:python manage.py makemigrations polls

Migrations for ‘polls’:
polls/migrations/0001_initial.py:
- Create model Choice
- Create model Question
- Add field question to choice

8、执行命令:python manage.py sqlmigrate polls 0001

9 再执行python manage.py migrate 命令,创建数据库表

猜你喜欢

转载自blog.csdn.net/abcdasdff/article/details/82660000