Python3.4/3.5+Django1.8.16连接MySQL

Django自带的数据库是SQLite,而我对MySQL熟一些,所以还是让Django用MySQL数据库吧。Python版本方面,我虚拟机Ubuntu16.04上用的是Python3.5,阿里云Ubuntu14.04用的是Python3.4。

这就带来了一个问题:Django中连接数据库的模块MySQLdb不支持Python3,我们还需要找替代方法来连接MySQL。

1. Python3中连接MySQL的替代方法

百度、谷歌可以发现pymysql模块是最常见的替代方法。参考http://stackoverflow.com/questions/4960048/python-3-and-mysql。里面的采纳答案列举了很多替代方法,其中mysql-connector-python是oracle官方支持的模块,但是与MySQLdb不兼容让我有点担心。Django源码中应该有很多地方都用到MySQLdb,不兼容的话可能会出问题。而pymysql能够“almost completely”兼容MySQLdb,这是它最大的优点。

(1) 安装pymysql

pip3 install PyMySQL

在阿里云上pip3下载失败,只能下载pymysql源码进行安装了。去pypi搜pymysql,注意不要用pymysql3(pymysql3的页面已经提示DO NOT USE THIS. PyMySQL support Python 3 already.),而是用pymysql。下载到任意一个地方,解压,python3 setup.py install就行了。

(2) Django项目中设置__init__.py

我对Python也是一知半解,所以也不太清楚__init__.py的作用。以下说明摘自Angelia的专栏http://blog.csdn.net/yxmmxy7913/article/details/4233420

原来在python模块的每一个包中,都有一个__init__.py文件(这个文件定义了包的属性和方法)然后是一些模块文件和子目录,假如子目录中也有 __init__.py 那么它就是这个包的子包了。当你将一个包作为模块导入(比如从 xml 导入 dom )的时候,实际上导入了它的 __init__.py 文件。

一个包是一个带有特殊文件 __init__.py 的目录。__init__.py 文件定义了包的属性和方法。其实它可以什么也不定义;可以只是一个空文件,但是必须存在。如果 __init__.py 不存在,这个目录就仅仅是一个目录,而不是一个包,它就不能被导入或者包含其它的模块和嵌套包。

总之,我暂且将__init__.py理解为这个Django项目中执行初始化的脚本,它是先于其他脚本、程序执行的。

在Django项目目录下有个与项目同名的目录,里面就有__init__.py。一般而言,它是空的,我们只需加上:

import pymysql
pymysql.install_as_MySQLdb()

这样,在一开始我们就使用了pymysql来替代了MySQLdb。

2. 将Django项目数据库改成MySQL

这个没啥好说的。在setting.py找到DATABASES这一块,就这样改:


当然,NAME就是数据库名字咯,自己先创建一个数据库吧。比如创建一个叫mydb的数据库:create database mydb default charset utf8 collate utf8_general_ci;


准确地说,1-1安装pymysql是创建Django项目前就应该做的,1-2和2都是在配置每个Django项目要做的。

就酱。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值