Django數據庫的使用(sqlite)

 

Django支持sqlite3, MySQL, PostgreSQL等數據庫,如果不設置,默認使用sqlite數據庫

 

 

1,創建項目,名爲sqliteTest

     在項目中創建一個應用,名爲sqTest

django-admin startproject sqliteTest
cd sqliteTest/
django-admin startapp sqTest

 

 

2,將新建的應用添加到項目下的sqliteTest文件夾中的settings.py中,告訴Django有sqTest這個應用

     setting.py中有一個屬性INSTALLED_APPS,將sqTest填入。

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',

    ‘sqTest’
]

 

 

 

3,在sqTest文件夾的models中添加需要的數據的類。比如我需要一些NBA球員的數據,所以我創建一個Player類,裏面包含幾個屬性,分別爲姓名,年齡,位置,號碼。其中,CharField表示該屬性應該爲一個字段,IntegerField表示該屬性爲一個整數。max_length表示最大長度。

class Player(models.Model):
    name = models.CharField(max_length=30)
    age = models.IntegerField()
    position = models.CharField(max_length=10)
    number = models.IntegerField()

 

 

4,在終端中輸入

python manage.py makemigrations
python manage.py migrate

 輸入之後會自動生成models中的數據表,比如剛纔的Player類,此時生成了一個Player表。可以通過終端,django自帶的數據庫管理後臺等方式查看。

 

 

5,終端查看

使用python manage.py shell進入命令行,之後讀取Player

>>> Player.objects.all()
<QuerySet []>
>>> Player.objects.create(name="Curry", age=28, position="G", number=30)
<Player: Player object>

 第一次使用Player.objects.all()命令查看Player中的所有數據時,因爲沒有寫入過,所以爲空。

使用create創建一個球員Curry,再次查看,出現<Player: Player object>。但是此時打印出來的數據可讀性不強,所以退出命令行,在model中添加一個__str__方法,增加可讀性。

    def __str__(self):
        return self.name

 此時再次進入命令行,讀取Player

>>> from sqTest.models import Player
>>> Player.objects.all()
<QuerySet [<Player: Curry>]>

 輸出時出現了數據的名字,可讀性增強。

 

 

6,添加數據庫,除了上面一種方法,還有兩種方法創建。

(1)創建一個Person類的實例,給實例的屬性賦值,最後使用save()方法將實例存入數據庫。

>>> player = Player(name="Durant")
>>> player.age = 28
>>> player.position = "F"
>>> player.number = 35
>>> player.save()
>>> Player.objects.all()
<QuerySet [<Player: Curry>, <Player: Durant>]>

 (2)使用get_or_create創建,防止重複,如果插入相同的,會失敗。如果如果只用create,會使表中有兩個相同的數據

>>> Player.objects.get_or_create(name="Curry", age=28, position="G", number=30)
(<Player: Curry>, False)

 

 

7,獲取對象

(1),獲取該數據表所有數據:

>>> Player.objects.all()

(2),get方法,只能獲取一個值,如果獲取的值有兩個,會失敗

>>> Player.objects.get(name="Durant")
<Player: Durant>
>>> Player.objects.get(age=28)
sqTest.models.MultipleObjectsReturned: get() returned more than one Player -- it
 returned 2!

 age爲28的有兩個,所以第二次獲取失敗。

 

(3),filter篩選多個

>>> Player.objects.filter(age=28)
<QuerySet [<Player: Curry>, <Player: Durant>

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章