Django——数据库的增删改

因为我们之前定义的模型里面的id都是不自增的,所以加入数据时需要手动添加,很麻烦,所以我们先把id的定义都删除,然后把migrations文件夹下的那些文件都delete。
然后我们进入mysql数据库,把我们之前的数据库删掉drop database lesson4;然后再重新创建一个库create database lesson4;,这样比较方便一些。
然后再makemigrations 和 migrate。
这样的话会自动给我们每个表创建一个自增的id的。

接下来通过shell模式,创建对象:

python manage.py shell

from app.models import User
user = User.objects.create(username='cong', age='18', phone=13899999999, email='[email protected]', info='加油丛丛')

结果这里的phone,out of range。。。无奈改短先。
Django——数据库的增删改_第1张图片
这里能看到已经创建了一个对象
Django——数据库的增删改_第2张图片
然后user这里返回的值我们是可以自定义的。

在User类中加上:

    def __str__(self):
        return 'user:{}'.format(self.username)

然后我们exit(),重新进一下shell

from app.models import User
user = User.objects.get(id = 1)
user

按照格式返回了
第二创建user方法:

>>> user = User(username='xiaoming', age=17, phone=111111, email='[email protected]', info='xiaoming doesnot share food')
>>> user.save()

修改值:

>>> user.age = 19
>>> user.save()
>>> user.age
19

使用vars可以将对象的值以字典的方式显示:

>>> _user = vars(user)
>>> _user
输出如下:
{
     '_state': <django.db.models.base.ModelState object at 0x000001C8360A3E50>, 
'id': 2, 
'username': 'xiaoming', 
'age': 19, 
'phone': 111111, 
'email': '[email protected]', 
'info': 'xiaoming doesnot share food', 
'create_time': datetime.datetime(2021, 11, 13, 8, 9, 20, 121479, tzinfo=<UTC>), 
'update_time': datetime.datetime(2021, 11, 13, 8, 10, 25, 421997, tzinfo=<UTC>)}

删除

>>> user.delete()
(1, {
     'app.Group_user': 0, 'app.User': 1})

这时再使用get去获取id=2 就找不到,会报错

>>> user = User.objects.get(id = 2)
Traceback (most recent call last):
  File "", line 1, in <module>
  File "C:\Users\35479\AppData\Local\Programs\Python\Python38\lib\site-packages\django\db\models\manager.py", line 82, in manager_method
    return getattr(self.get_queryset(), name)(*args, **kwargs)
  File "C:\Users\35479\AppData\Local\Programs\Python\Python38\lib\site-packages\django\db\models\query.py", line 397, in get
    raise self.model.DoesNotExist(
app.models.User.DoesNotExist: User matching query does not exist.

ps:如果使用filter,不会报错,只会返回一个[]

>>> user = User.objects.filter(id = 2)
>>> user
<QuerySet []>

把其他的models也都导入进来:

from app.models import Userprofile, Diary, Group
user = User.objects.get(id=1)
user_profile = Userprofile.objects.create(user=user, birthday='1998-09-28')
import time
diary = Diary.objects.create(user=user, content='今天天气晴', create_time=time.time())

这里的create time不是自增的,而是一个整型,所以需要我们导入time,自己创建。

然后是Group对象的创建:

group = Group.objects.create(user=user, name='IT', create_time=time.time())

这里报了一个错误TypeError: Direct assignment to the forward side of a many-to-many set is prohibited. Use user.set() instead.
这里能是不能直接创建user的。
步骤如下:

>>> group = Group(name='IT', create_time=time.time())
>>> group.save()
>>> group.user.add(user)
>>> group
<Group: Group object (1)>

先添加user之外的其他字段值,然后save,在用add的方式把user添加进去。

再给group添加一些user:

>>> user = User.objects.get(id=1)
>>> user
<User: user:cong>
>>> group = Group.objects.get(id=2)
>>> group.name
'开发'
>>> group.user.add(user)

就把cong也加到group开发里了。

你可能感兴趣的:(Django艰难学习之旅,django,数据库,python)