我使用 git repo 中的 Django dev(1.6.x) 并且我想使用 MySQL,但是在settings.py
文件上无法设置 MySQL,因为 python3 和 Django 不支持 MySQL,所以我在 python3.x 上使用 pymysql 包没有任何问题,但是在 Django 中也无法设置settings.py
。
我可以在带有 python3 的 django 上使用 mysql(或 pymysql 或?)吗?
我使用 git repo 中的 Django dev(1.6.x) 并且我想使用 MySQL,但是在settings.py
文件上无法设置 MySQL,因为 python3 和 Django 不支持 MySQL,所以我在 python3.x 上使用 pymysql 包没有任何问题,但是在 Django 中也无法设置settings.py
。
我可以在带有 python3 的 django 上使用 mysql(或 pymysql 或?)吗?
我还努力让 MySQL 与 Django 1.6 和 Python 3.3 一起工作。唯一有效的是切换到 PyMySQL。在这里查看我的帖子
在下面添加答案
我的环境:Windows 上的 OSX 10.9、Python 3.3.3、Django 1.6.1、PyMySQL 0.6.1、MySQL Server 5.5
如何使其工作:
安装 PyMySQL 0.6.1 版本(https://github.com/PyMySQL/PyMySQL/):您可以使用 pip 安装它,即:pip install PyMySQL
或手动下载包;他们的网站上有一个很好的文档说明如何做到这一点。
打开您的 Django App __init__.py并粘贴以下行:
import pymysql
pymysql.install_as_MySQLdb()
现在,打开settings.py并确保您的 DATABASE 属性如下所示:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'mydb',
'USER': 'dbuser',
'PASSWORD': 'dbpassword',
'HOST': 'dbhost',
'PORT': '3306'
}
}
就是这样,你应该能够执行python manage.py syncdb
来初始化你的 MySQL 数据库;请参阅下面的示例输出:
Creating tables ...
Creating table django_admin_log
Creating table auth_permission
Creating table auth_group_permissions
...
...
Creating table socialaccount_socialtoken
You just installed Django's auth system, which means you don't have any superusers defined.
...
pymysql for python 3 不是 Django DB 后端,但是有证据表明,在Django Python 3 MySQL backend changes中,已经进行了一些工作,将 MySQL 后端移植为 Python 3 兼容。
其他页面显示 Django 1.5 提供的 MySQL 后端适用于 Python 3: Django MySQL Works on Python 3.2.2
然而,Python 2.x (mysql-python) 上可用的默认 MySQL 包装器不支持 Python 3。我怀疑MySQL Python 3上的包兼容,你可以试一试。
还要确保您使用 Python 3.2 或 3.3 或更高版本运行 Django。不支持 Python 3.0。
如果在这些检查后仍然无法正常工作,请发布您的 DATABASES 设置以防出现问题。
另外,我在 Django 存储库中找不到任何高于 Django 1.5 的内容,你确定它是 1.6.x 吗?
我一直在等待 django 和 python 3.x 对 mysql 的支持,最后有一个官方兼容的引擎可以让你做到这一点。
http://dev.mysql.com/doc/connector-python/en/connector-python-django-backend.html
我使用 python 3 创建了一个 virtualenv,并且能够使用上面链接中的数据库特定设置。
DATABASES = {
'default': {
'NAME': 'mydatabase',
'ENGINE': 'mysql.connector.django',
'USER': 'mydbuser',
'PASSWORD': 'mydbpassword',
'OPTIONS': {
'autocommit': True,
},
}
}
剪切并粘贴 Django Poll Tutorial 中的模型,“python manage syncdb”工作。
更多测试看整个 ORM 是否支持这个连接器。
我在这里写完整:http: //bunwich.blogspot.ca/2014/02/finally-mysql-connector-that-works-with.html
我通过这个解决了这个问题:
根据 Django 1.8 和 1.9 的文档,mysqlclient是推荐的驱动程序:
MySQLdb是一个由 Andy Dustman 开发和支持十多年的原生驱动程序。
mysqlclient是 MySQLdb 的一个分支,它特别支持 Python 3,可以用作 MySQLdb 的替代品。在撰写本文时,这是将 MySQL 与 Django 一起使用的推荐选择。
MySQL Connector/Python是来自 Oracle 的纯 Python 驱动程序,不需要 MySQL 客户端库或标准库之外的任何 Python 模块。
所以,我安装了mysqlclient
sudo pip install mysqlclient
在 settings.py 中配置数据库
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'mydjango',
'USER': 'user',
'PASSWORD': 'password',
'HOST': 'localhost',
'PORT': '3306'
}
}
但是当我./manage.py syncdb
用于测试时,我收到一条错误消息:
_mysql.so not found
要解决此问题,请添加
export DYLD_LIBRARY_PATH=/usr/local/mysql/lib/
到~/.bashrc
然后运行:
source ~/.bashrc
现在应该修好了。