=Start=
缘由:
因为团队里现在都在用Django作为Web开发框架(Flask虽然简单、轻量,但并不适合团队协作开发),所以最近我的主要任务之一就是把之前用Flask写的Web应用往Django上迁移,虽然之前用过一段时间的Django,但并不熟悉,这次就想着在迁移的过程中记录一下大体过程,加深印象,也为方便以后参考。
正文:
0.使用MySQL数据库
先安装MySQLdb模块作为底层驱动(需要先安装MySQL的一些基础库);
(virtualenv) $ pip install MySQL-python
然后修改项目的settings.py配置数据库连接信息;
# Database # https://docs.djangoproject.com/en/1.8/ref/settings/#databases # http://www.ziqiangxuetang.com/django/django-multi-database.html DATABASES = { 'default': { 'ENGINE': 'django.db.backends.sqlite3', 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'), }, 'db1': { 'ENGINE': 'django.db.backends.mysql', 'NAME': 'dbname1', 'USER': 'your_db_user_name', 'PASSWORD': 'yourpassword', "HOST": "localhost", }, 'db2': { 'ENGINE': 'django.db.backends.mysql', 'NAME': 'dbname2', 'USER': 'your_db_user_name', 'PASSWORD': 'yourpassword', "HOST": "localhost", }, } # use multi-database in django DATABASE_ROUTERS = ['project_name.database_router.DatabaseAppsRouter'] DATABASE_APPS_MAPPING = { #'app_name':'database_name', 'app1': 'db1', 'app2': 'db2', }
验证数据库配置是否成功(没有报错则表示成功):
$ cd project_dir $ python manage.py shell >>> import MySQLdb >>> from django.db import connection >>> cursor = connection.cursor()
在Django中使用MySQL数据库
- http://www.cnblogs.com/wendoudou/p/mysql.html
- https://shenxgan.gitbooks.io/django/content/publish/2015-07-13-django-mysql.html
- https://docs.djangoproject.com/en/1.8/ref/databases/#connecting-to-the-database
- http://stackoverflow.com/questions/25794121/cant-install-python-mysql-on-os-x-10-10-yosemite
在Django中进行多数据库的设置
- https://docs.djangoproject.com/en/1.8/topics/db/multi-db/
- http://stackoverflow.com/questions/18547468/multiple-databases-and-multiple-models-in-django
- django 项目中使用多数据库 multiple databases
- Django 多数据库联用
1.Django的ORM之Model
从头开始创建新表
使用已有的数据表
在基于Django的Web应用中可以直连MySQL进而操作MySQL数据库,比较灵活,但是也比较繁琐,需要注意防范SQL注入;
其次可以使用Django自身提供的ORM(比起SQLalchemy来说要简单一些),但需要编写models,对于已经存在的数据库表,可以通过inspectdb命令来自动生成models,比较方便『django create model from existing table』:
参考解答:
$ python manage.py inspectdb > django_app/models.py $ python manage.py migrate #可能会出现「A model can't have more than one AutoField.」的错误提示,所以需要编辑models.py,将 AutoField 那个字段设置成「primary_key=True」 $ vim django_app/models.py $ python manage.py migrate
参考链接:
- https://docs.djangoproject.com/en/1.10/howto/legacy-databases/
- http://stackoverflow.com/questions/1179469/is-it-posible-to-generate-django-models-from-the-database
- http://stackoverflow.com/questions/21683095/want-to-use-my-existing-mysql-database-with-django
- http://blog.alarmchang.com/?p=177
- https://docs.djangoproject.com/en/1.8/topics/db/models/#automatic-primary-key-fields
2.Django的ORM之QuerySet
- filter() #过滤(但不支持「不等于」,需要用到下面的exclude()或Q())
- exclude() #排除
- Q() #可用来做一些复杂的查询
==
- Django ORM 查询
- 原生SQL查询
- 建立一个更高级别的查询 API:正确使用Django ORM 的方式
- Django ORM 和 QuerySets(查询集)
- Django QuerySet API
3.Django的ORM如何实现「group by」
from django.db.models import Count Members.objects.values('designation').annotate(dcount=Count('designation')).order_by('-dcount') 等价于: SELECT designation, COUNT(designation) AS dcount FROM members GROUP BY designation ORDER BY dcount desc;
- http://stackoverflow.com/questions/629551/how-to-query-as-group-by-in-django
- http://stackoverflow.com/questions/13403609/how-to-group-by-and-aggregate-with-django
- http://stackoverflow.com/questions/327807/django-equivalent-for-count-and-group-by
4.Django的ORM之数据表更改
我们设计数据库的时候,早期设计完后,后期会发现不完善,要对数据表进行更改,这时候就要了解一下「Django 数据表更改」的知识。
=END=
《“Django的ORM使用记录”》 有 1 条评论
Django使用两个以上mysql数据库
http://opslinux.com/2014/11/20/Django%E4%BD%BF%E7%94%A8%E4%B8%A4%E4%B8%AA%E4%BB%A5%E4%B8%8Amysql%E6%95%B0%E6%8D%AE%E5%BA%93/
`
settings.py #添加数据库信息
router #自定义路由
model #代码中使用
`