欧美free性护士vide0shd,老熟女,一区二区三区,久久久久夜夜夜精品国产,久久久久久综合网天天,欧美成人护士h版

目錄

柚子快報(bào)激活碼778899分享:django連接數(shù)據(jù)庫(kù)

柚子快報(bào)激活碼778899分享:django連接數(shù)據(jù)庫(kù)

http://yzkb.51969.com/

django 數(shù)據(jù)庫(kù)相關(guān)

django項(xiàng)目創(chuàng)建后有一個(gè)默認(rèn)的sqlite3數(shù)據(jù)庫(kù)

數(shù)據(jù)庫(kù)連接方式

配置數(shù)據(jù)庫(kù)的方式有很多

1.單數(shù)據(jù)庫(kù)

2.讀寫分離數(shù)據(jù)庫(kù)

3.多數(shù)據(jù)庫(kù)連接

4.主從數(shù)據(jù)庫(kù)(一主多從,多主多從)

等等

這里主要介紹我使用過(guò)的多數(shù)據(jù)庫(kù)連接

多數(shù)據(jù)庫(kù)連接方式配置

首先配置你要連接的數(shù)據(jù)庫(kù)

DATABASES = {

# mysql8.0

'default': {

'ENGINE': 'django.db.backends.mysql',

'HOST': 'localhost',

'PORT': '3306',

'NAME': 'db1',

'USER': 'root',

'PASSWORD': 'root',

},

# mysql8.0

'system': {

'ENGINE': 'django.db.backends.mysql',

'HOST': 'localhost',

'PORT': '3306',

'NAME': 'db2',

'USER': 'root',

'PASSWORD': 'root',

}

}

數(shù)據(jù)庫(kù)映射

DATABASE_ROUTERS = ['庫(kù)名.database_router.DatabaseAppsRouter']

DATABASE_APPS_MAPPING = {

'mydefault': 'default',

'mysystem': "system",

}

在setting同級(jí)創(chuàng)建路由:database_router.py

from django.conf import settings

DATABASE_MAPPING = settings.DATABASE_APPS_MAPPING

class DatabaseAppsRouter(object):

"""

A router to control all database operations on models for different

databases.

In case an app is not set in settings.DATABASE_APPS_MAPPING, the router

will fallback to the `default` database.

Settings example:

DATABASE_APPS_MAPPING = {'app1': 'db1', 'app2': 'db2'}

"""

def db_for_read(self, model, **hints):

""""Point all read operations to the specific database."""

if model._meta.app_label in DATABASE_MAPPING:

return DATABASE_MAPPING[model._meta.app_label]

return None

def db_for_write(self, model, **hints):

"""Point all write operations to the specific database."""

if model._meta.app_label in DATABASE_MAPPING:

return DATABASE_MAPPING[model._meta.app_label]

return None

def allow_relation(self, obj1, obj2, **hints):

"""Allow any relation between apps that use the same database."""

db_obj1 = DATABASE_MAPPING.get(obj1._meta.app_label)

db_obj2 = DATABASE_MAPPING.get(obj2._meta.app_label)

if db_obj1 and db_obj2:

if db_obj1 == db_obj2:

return True

else:

return False

return None

def allow_syncdb(self, db, model):

"""Make sure that apps only appear in the related database."""

if db in DATABASE_MAPPING.values():

return DATABASE_MAPPING.get(model._meta.app_label) == db

elif model._meta.app_label in DATABASE_MAPPING:

return False

return None

def allow_migrate(self, db, app_label, model=None, **hints):

"""

Make sure the auth app only appears in the 'auth_db'

database.

"""

if db in DATABASE_MAPPING.values():

return DATABASE_MAPPING.get(app_label) == db

elif app_label in DATABASE_MAPPING:

return False

return None

路由文件很好理解,在多寫數(shù)據(jù)庫(kù)時(shí),模塊中的(model._meta.app_label)app_label對(duì)應(yīng)的字段去映射DATABASE_APPS_MAPPING,如果找不到返回None,找到返回?cái)?shù)據(jù)庫(kù)信息。

allow_relation是對(duì)應(yīng)兩個(gè)model對(duì)應(yīng)的數(shù)據(jù)庫(kù),兩個(gè)必須都存在,且屬于一個(gè)數(shù)據(jù)庫(kù)。

在配置數(shù)據(jù)庫(kù)時(shí)也可以選擇不使用默認(rèn)數(shù)據(jù)庫(kù)

DATABASES = {

'default': {},

# mysql8.0

'app': {

'ENGINE': 'django.db.backends.mysql',

'HOST': 'localhost',

'PORT': '3306',

'NAME': 'db1',

'USER': 'root',

'PASSWORD': 'root',

},

# mysql8.0

'system': {

'ENGINE': 'django.db.backends.mysql',

'HOST': 'localhost',

'PORT': '3306',

'NAME': 'db2',

'USER': 'root',

'PASSWORD': 'root',

}

}

創(chuàng)建model模塊

from django.db import models

# Create your models here.

class User(models.Model):

username = models.CharField(verbose_name="用戶名", max_length=64)

password = models.CharField(verbose_name="用戶密碼", max_length=64)

class Meta:

db_table = "userInfo"

app_label = 'mysystem' #指定數(shù)據(jù)庫(kù)對(duì)應(yīng)的映射

配置好以后

命令行操作

在命令終端創(chuàng)建數(shù)據(jù)庫(kù)

創(chuàng)建新的遷移文件:

python manage.py makemigrations

將應(yīng)用程序下的模型根據(jù)路由遷移到對(duì)應(yīng)的數(shù)據(jù)庫(kù)中

遷移所有數(shù)據(jù)到對(duì)應(yīng)的數(shù)據(jù)庫(kù)中

python manage.py migrate

python manage.py migrate --database=app

python manage.py migrate --database=system

至此數(shù)據(jù)庫(kù)中就創(chuàng)建好了對(duì)應(yīng)的表

重新遷移

但是當(dāng)多次修改,更新model模塊后,會(huì)創(chuàng)建很多遷移文件,那么可以通過(guò)以下方式重新創(chuàng)建遷移文件,整理成一個(gè)文件

1.檢查migrations文件夾下面的修改記錄文件是否與數(shù)據(jù)庫(kù)保持一致

python manage.py makemigrations

需要同步

2.查看當(dāng)前項(xiàng)目下所有APP對(duì)應(yīng)的已經(jīng)生效的(已經(jīng)成功執(zhí)行的)migration文件,命令如下:

python manage.py showmigrations

前面的[x]表示已經(jīng)執(zhí)行過(guò)的文件

3.重置你的APP的操作,使它們恢復(fù)到?jīng)]有執(zhí)行的狀態(tài),這里注意一下fake前面的符號(hào),是兩個(gè)“-”,另外,imooc是映射key值,記得將它替換成你的APP名字。

python manage.py migrate --fake mysystem zero

4.再次查看當(dāng)前項(xiàng)目下所有APP對(duì)應(yīng)的已經(jīng)生效的(已經(jīng)成功執(zhí)行的)migration文件,命令如下:

python manage.py showmigrations

5.然后放心大膽地刪除migrations文件夾下面,除了__init__.py文件,的所有的帶有序號(hào)的py文件,包括pycache文件夾!

6.執(zhí)行下面的命令,再次為這個(gè)APP 生成 0001_initial.py 之類的文件

python manage.py makemigrations

7.查看執(zhí)行的sql語(yǔ)句

python manage.py sqlmigrate mysystem 0001_initial

8.重新遷移數(shù)據(jù)

python manage.py migrate --database=system

用戶自己管理系統(tǒng)數(shù)據(jù)庫(kù)

有時(shí)需要自己管理整個(gè)系統(tǒng),比如用戶信息等,而且自己創(chuàng)建的表名和系統(tǒng)的數(shù)據(jù)庫(kù)名相同時(shí)

這是我們就需要將數(shù)據(jù)表轉(zhuǎn)為手動(dòng)控制模型的管理行為

model模塊設(shè)置

class Meta:

managed = False

將managed選項(xiàng)設(shè)置為False,我們可以手動(dòng)控制模型的管理行為。

managed選項(xiàng)的作用

在Django模型中,managed選項(xiàng)控制是否由Django來(lái)管理模型對(duì)應(yīng)的數(shù)據(jù)庫(kù)表。該選項(xiàng)的默認(rèn)值為True,表示Django將自動(dòng)創(chuàng)建、修改和刪除模型對(duì)應(yīng)的表。當(dāng)我們將managed選項(xiàng)設(shè)置為False時(shí),Django將不再自動(dòng)進(jìn)行數(shù)據(jù)庫(kù)表的管理操作。這對(duì)于已存在的數(shù)據(jù)庫(kù)表或者希望手動(dòng)創(chuàng)建數(shù)據(jù)庫(kù)表的情況非常有用。

配置此設(shè)置后,就不能通過(guò)命令的方式去創(chuàng)建此表,需要手動(dòng)去數(shù)據(jù)庫(kù)進(jìn)行表的創(chuàng)建

在使用手動(dòng)控制模型的管理行為之前先看看django 框架為我們提供了哪些表,各表的詳細(xì)用途,才能更好的去自己管理

柚子快報(bào)激活碼778899分享:django連接數(shù)據(jù)庫(kù)

http://yzkb.51969.com/

精彩文章

評(píng)論可見,查看隱藏內(nèi)容

本文內(nèi)容根據(jù)網(wǎng)絡(luò)資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點(diǎn)和立場(chǎng)。

轉(zhuǎn)載請(qǐng)注明,如有侵權(quán),聯(lián)系刪除。

本文鏈接:http://gantiao.com.cn/post/19198257.html

發(fā)布評(píng)論

您暫未設(shè)置收款碼

請(qǐng)?jiān)谥黝}配置——文章設(shè)置里上傳

掃描二維碼手機(jī)訪問(wèn)

文章目錄