我从git repo使用Django dev(1.6.x)并且我想使用MySQL,但是settings.py
文件无法设置MySQL因为python3和Django不支持MySQL,所以我使用了pymysql包在python3.x上没有任何问题,但在Django中也无法在settings.py
上设置它。
我可以在django上使用mysql(或pymysql或?)和python3吗?
答案 0 :(得分:72)
我也在努力让MySQL与Django 1.6和Python 3.3一起工作;唯一有效的方法是切换到PyMySQL。请参阅here
上的帖子在下面添加答案
我的环境: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应用 __ 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.
...
答案 1 :(得分:7)
pymysql for python 3不是Django DB后端,但是有证据表明已经完成了一些工作,将MySQL后端移植到{3}}处兼容Python 3。
其他页面显示Django 1.5提供的MySQL后端适用于Python 3: Django Python 3 MySQL backend changes
Python 2.x(mysql-python)上提供的默认MySQL包装器不支持Python 3。 我怀疑Django MySQL Works on Python 3.2.2处的包是兼容的,您可以尝试一下。
还要确保使用Python 3.2或3.3或更高版本运行Django。不支持Python 3.0。
如果在这些检查后仍然无效,请发布您的DATABASES设置,以防出现问题。
另外,我在Django repos中找不到Django 1.5以上的任何内容,你确定它是1.6.x吗?
答案 2 :(得分:7)
我一直在等待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民意调查教程中的模型,'python manage syncdb'工作。
进行更多测试以查看整个ORM是否支持此连接器。
我在这里写完: http://bunwich.blogspot.ca/2014/02/finally-mysql-connector-that-works-with.html
答案 3 :(得分:6)
我解决了这个问题:
根据Django 1.8和1.9的文档,mysqlclient is the recommended driver:
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
现在应该修复。