2022-09-30

新增数据

方式一:

进入虚拟环境,进入shell工具环境中(“python manage.py shell”),插入数据。在插入数据之前,可以先将要插入的内容写在“views.py”中,,这样做的目的是先写在此处会有代码提示,较为方便。之后将内容放到shell工具中。

首先,先要导入某个表,使用的是ORM模式,因此导入的是一个子应用中的“models”中的一个类。如:

from book.models import BookInfo1

之后插入要新增的数据

book = BookInfo1(
    name = 'python',
    pub_data = "2000-01-01"
)

之后,注意方式一是需要手动保存的,使用的方式

book.save()

插入数据后,使用“win+R”进入终端,输入“cmd”,进入数据库中(mysql -uroot -p),输入密码,进入存放表的数据库中(use test),查看指定表中的数据信息(“select * from book_bookinfo1”)

---------------------------------------------

方式二:

导入模块同上,插入要新增的数据

BookInfo1.objects.create( name = 'java', pub_data = "2000-01-01" )

将上面的代码放置到shell工具中运行,进入shell工具(python manage.py shell)。上面的代码表明已经进行了保存。在终端中数据库中的表中查询会看到。

问题描述:

  在插入数据时,发现了一个问题,有一个“datatime”类型的数据插入时,我插入了一个“2000-01-01”,然后在终端中的数据库查询时,发现它的时间和我插入的时间不是一致的,我以为是没有加时分秒,后来加上也是一样。之后多插了几个数据,发现了规律,它们都减少了8个小时。后来我查询了baidu,看到其他博主有关此问题的解答。

原因分析及问题解决:

  是因为系统默认使用的是美国时间,需要将数据库的默认时间改为“北京时间”。在终端进入数据库后,

查看当前时间的指令:

 select curtime();
 show variables like "%time_zone%";

修改时区时间:

 set global time_zone = '+8:00';
 set time_zone = '+8:00';

刷新生效的指令:

 flush privileges;

之后,修改数据库中表的信息

update book_bookinfo1 set pub_date = "2000-01-01" where name = "python";

  注意:修改指定字段的前面要加上关键字“set”,而且要注意表名要放在“update”之后,不是修改字段的后面。

上面重新设置时区语句比较奇怪,就是一段时间后,在shell中插入一个新的记录还是会出现时间不一致的情况。在终端中重新输入上面的修改时区语句,还是不起作用。暂时只能用最笨的办法,就是给日期手动加8个小时。哎~~

----------------------------------------------------------------------------------

修改数据

方式一:

进入环境,进入shell环境同上,导入模型,先查找到数据,后修改,最后进行保存。例:

from book.models import BookInfo1
book = BookInfo1.objects.get(id = 1)

  啊啊啊啊,姐妹们,一定要注意,此处“BookInfo1”后面是不能加()的,如果加上括号后,相当于给类创建了一个实例变量,后面的代码变成了实例变量的“objects”所有,有问题。啊啊啊,还好找到问题所在了,原来是多了一个括号。我的天呐。我发现一般敲代码,要不然是拼写理解偏差,要不然是多了/少了一个逗号,要不然是上面和下面的逻辑结构一致,直接复制好几回后,改变其中变量后,总有一个没有匹配改好。呜呜呜~~,查bug ,好不容易。

book.readcount = 20000

  这里是选中要修改的记录后,直接给属性赋值修改。而sql中的修改前面是要加“set”的,这里写的时候,“book”后面加了“set”,,,,之后改了。sql中的修改与pycharm中shell中的修改大同小异,但是语句格式还是不一样的,要注意了。

---------------------------

方式二:

前提环境同上,已导入模块

语句:

BookInfo1.objects.filter(id = 3).update(
        readcount = 20 
)

发表回复