Django数据库的使用(sqlite)

刨食的兔子 2016-08-29

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>

 

相关推荐

inspuryhq / 0评论 2020-07-28