Django: 數(shù)據(jù)庫(kù)遷移和管理

startup-photos.jpg

數(shù)據(jù)庫(kù)遷移

寫完數(shù)據(jù)庫(kù)模型之后,要根據(jù)這個(gè)模型創(chuàng)建數(shù)據(jù)庫(kù)。目前Django支持如下數(shù)據(jù)庫(kù)引擎:

  • MySQL: django.db.backends.mysql
  • SQLite 3: django.db.backends.sqlite3
  • PostgreSQL: django.db.backends.postgresql_psycopg2

其中SQLite3是Python自帶的,對(duì)于我們這種小博客是夠用了的。因此就不需要去setting.py里修改了。
Django使用manage.py的makemigrations刪除建立新的migrations檔案,記錄 數(shù)據(jù)變化。用migrate根據(jù)這份檔案進(jìn)行實(shí)際操作。

(env)$ python manage.py makemigrations

Migrations for 'appblog':
  appblog/migrations/0001_initial.py:
    - Create model Category
    - Create model Post
    - Create model Tag
    - Add field tags to post
(env)$ python manage.py migrate

Operations to perform:
  Apply all migrations: admin, appblog, auth, contenttypes, sessions
Running migrations:
  Applying contenttypes.0001_initial... OK
  Applying auth.0001_initial... OK
  Applying admin.0001_initial... OK
  Applying admin.0002_logentry_remove_auto_add... OK
  Applying appblog.0001_initial... OK
  Applying contenttypes.0002_remove_content_type_name... OK
  Applying auth.0002_alter_permission_name_max_length... OK
  Applying auth.0003_alter_user_email_max_length... OK
  Applying auth.0004_alter_user_username_opts... OK
  Applying auth.0005_alter_user_last_login_null... OK
  Applying auth.0006_require_contenttypes_0002... OK
  Applying auth.0007_alter_validators_add_error_messages... OK
  Applying auth.0008_alter_user_username_max_length... OK
  Applying sessions.0001_initial... OK

數(shù)據(jù)庫(kù)的遷移記錄存放在migration的文件夾下。

數(shù)據(jù)庫(kù)的增取刪改(CRUD)

數(shù)據(jù)庫(kù)的主要操作就是增加數(shù)據(jù),提取數(shù)據(jù),刪除數(shù)據(jù),修改數(shù)據(jù)這四個(gè)內(nèi)容。我們沒有必要專門學(xué)習(xí)SQL的語法,Django提供了專門的Python函數(shù)用來完成任務(wù)。
學(xué)習(xí)Python函數(shù)管理模型雖然快捷,但是不夠可視化。我們可以到服務(wù)器后代,以管理員的形式進(jìn)行修改。

第一步:檢查INSTALL_APPS和URL里面是否有管理員選項(xiàng)
setting.py

INSTALLED_APPS = (
    'django.contrib.admin',
    ...
)

urls.py

url(r'^admin/', include(admin.site.urls)),

第二步: 創(chuàng)建管理員

python manage.py createsuperuser

會(huì)要求輸入密碼和賬號(hào)

第三步: 設(shè)置需要管理的model
blog/admin.py

from django.contrib import admin
# Register your models here.
from .models import Post
from .models import Category
from .models import Tag

admin.site.register(Post)
admin.site.register(Category)
admin.site.register(Tag)

第四步:打開127.0.0.1:8000/admin管理

python manage.py runserver
admin

基本上沒有特殊需求,我們就用這個(gè)后臺(tái)管理就行了。至于專門的函數(shù)我就不想去學(xué)了,太麻煩了。但是多多了解,敲敲代碼,有助于肌肉記憶。
進(jìn)入Django定制的shell

python manage.py shell

增(Create): 增加新的內(nèi)容到數(shù)據(jù)庫(kù)去

from blog.models import Category
Category.objects.create(name="Django")
# 或
c = Category(name="Flask")
c.save()

取(Read): 查看數(shù)據(jù)庫(kù)有什么內(nèi)容

Category.objects.all()

Out[9]: <QuerySet [<Category: Category object>, <Category: Category object>, <Category: Category object>]>

objects 是我們的模型管理器,它為我們提供一系列從數(shù)據(jù)庫(kù)中取數(shù)據(jù)方法,這里我們使用了 all 方法,表示我們要把對(duì)應(yīng)的數(shù)據(jù)全部取出來??梢钥吹?all方法都返回了數(shù)據(jù),這些數(shù)據(jù)應(yīng)該是我們之前存進(jìn)去的,但是顯示的字符串有點(diǎn)奇怪,無法看出究竟是不是我們之前存入的數(shù)據(jù)。為了讓顯示出來的數(shù)據(jù)更加人性化一點(diǎn),我們?yōu)?3 個(gè)模型分別增加一個(gè) __str__ 方法:

class Category(models.Model):
  name = models.CharField(max_length=100)

  def __str__(self):
      return self.name

重新運(yùn)行就會(huì)顯示名字了, 會(huì)發(fā)現(xiàn)之前在網(wǎng)站增加的名字也在這里顯示了

Category.objects.all()
Out[2]: <QuerySet [<Category: Python>, <Category: Django>, <Category: Flask>]>
```

**改(Update)**: 修改之前存放的數(shù)據(jù),相當(dāng)于重命名
```
c = Category.objects.get(name="Flask")
# 或者可以用篩選的方式
# c.Cateogry.objects.filter(name="Flask")
c.name = "flask"
c.save()
Category.objects.all()
```

**刪(Delte)**: 刪除不需要的數(shù)據(jù)
```
c = Category.obejcts.get(name="flask")
c.delete()
Category.objects.all()
```

**注**:這里涉及了一些面向?qū)ο缶幊痰闹R(shí),需要抽空看看
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容