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>