Django 多数据操作 router 方法
2012-06-12 16:13
666 查看
Django支持多数据库,但是在官方文档中描述的不是很清楚。通过在网上搜索,终于了解到使用方法。
官方文档 https://docs.djangoproject.com/en/1.4/topics/db/multi-db/ 描述
本文仅仅描述使用router的方法,这里以一个汉字拼音数据库为例
1首先在settings.py 文件中添加多个数据库
2定义models
其中模型 pinyin 有一个额外的属性 _database,他说明了模型将要连接的数据库。如果没有这个属性,我们默认为他的值为default,即使默认的数据库 。
3 编写router
router有四个方法,
4向settings.py中添加 DATABASE_ROUTERS
现在就完成了。
在进行syncdb操作的时候,要注意syncdb有一个参数--database=dbase,其中dbase默认值是default,即默认是同步到default数据库。
在syncdb的时候,就要询问AppRouter的 allow_syncdb(self, db, model)方法,其中db就是参数dBase,model就是要同步的模型。返回True就是可以,False就是拒绝,None是不管。
对于有多个数据库时候,就需要syncdb多次,每一次同步一个数据库,就可以完成了。
官方文档 https://docs.djangoproject.com/en/1.4/topics/db/multi-db/ 描述
本文仅仅描述使用router的方法,这里以一个汉字拼音数据库为例
1首先在settings.py 文件中添加多个数据库
DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', # Add 'postgresql_psycopg2', 'postgresql', 'mysql', 'sqlite3' or 'oracle'. 'NAME': 'default', # Or path to database file if using sqlite3. 'USER': 'xxx', # Not used with sqlite3. 'PASSWORD': 'xxx', # Not used with sqlite3. 'HOST': 'localhost', # Set to empty string for localhost. Not used with sqlite3. 'PORT': '3306', # Set to empty string for default. Not used with sqlite3. }, 'pinyin': { 'ENGINE': 'django.db.backends.mysql', # Add 'postgresql_psycopg2', 'postgresql', 'mysql', 'sqlite3' or 'oracle'. 'NAME': 'pinyin', # Or path to database file if using sqlite3. 'USER': 'xxx', # Not used with sqlite3. 'PASSWORD': 'xxx', # Not used with sqlite3. 'HOST': 'localhost', # Set to empty string for localhost. Not used with sqlite3. 'PORT': '3306', # Set to empty string for default. Not used with sqlite3. }, }
2定义models
class pinyin(models.Model): _database = 'pinyin' charact = models.CharField(max_length=4) pinyin = models.CharField(max_length=10) onset = models.CharField(max_length=2) rime = models.CharField(max_length=4) ucode = models.IntegerField() freq = models.IntegerField()
其中模型 pinyin 有一个额外的属性 _database,他说明了模型将要连接的数据库。如果没有这个属性,我们默认为他的值为default,即使默认的数据库 。
3 编写router
router有四个方法,
def db_for_read(self, model, **hints) 建议 model 对象读操作时使用的数据库。
def db_for_write(self, model, **hints) 建议 model 对象写操作时使用的数据库。
def allow_relation(self, obj1, obj2, **hints) 当 obj1 和 obj2 之间允许有关系时返回 True ,不允许时返回 False ,或者没有 意见时返回 None 。
def allow_syncdb(self, db, model) 决定 model 是否可以和 db 为别名的数据库同步。
class AppRouter(object): def db_for_read(self, model, **hints): if hasattr(model, '_database'): return model._database return 'default' def db_for_write(self, model, **hints): if hasattr(model, '_database'): return model._database return 'default' def allow_relation(self, obj1, obj2, **hints): return None def allow_syncdb(self, db, model): if hasattr(model, '_database'): model_db = model._database else: model_db = 'default' if db == model_db: return True else: return False
4向settings.py中添加 DATABASE_ROUTERS
DATABASE_ROUTERS = ['path.to.AppRouter']
现在就完成了。
在进行syncdb操作的时候,要注意syncdb有一个参数--database=dbase,其中dbase默认值是default,即默认是同步到default数据库。
在syncdb的时候,就要询问AppRouter的 allow_syncdb(self, db, model)方法,其中db就是参数dBase,model就是要同步的模型。返回True就是可以,False就是拒绝,None是不管。
对于有多个数据库时候,就需要syncdb多次,每一次同步一个数据库,就可以完成了。
相关文章推荐
- Django 多数据操作 router 方法
- Django 多数据操作 router 方法
- 使用JDBC4.0操作Oracle中BLOB类型的数据方法
- easyUI的datagrid每行数据添加操作按钮的方法
- mybatis中的三种 批量操作数据的方法
- python 点滴记录7:django数据库操作中的filter和get方法
- 高通平台java层操作NV数据的方法
- ADO 操作数据库(三)--获取数据的各种方法
- Android 之采用execSQL和rawQuery方法完成数据的添删改查操作
- Django—Form两种解决表单数据无法动态刷新的方法
- oracle与sql server2000中不在同一个服务器上的数据库数据操作的方法对比
- 多线程操作stl::map引起的数据不一致问题的解决过程与方法
- oracle数据文件被误操作删除了恢复方法
- 两种多线程操作共享数据的方法
- django 数据模型管理工具south的使用方法详述
- django通过ajax发起请求返回JSON格式数据的方法
- Android之采用execSQL与rawQuery方法完成数据的添删改查操作详解
- Django分页查询并返回jsons数据(中文乱码解决方法)
- Django REST framework 返回json 数据以及 admin 分页返回数据方法
- Java 操作Excel数据方法