pip 是 Python 包管理工具,该工具提供了对Python 包的查找、下载、安装、卸载的功能。
python 异常记录
数据库异常记录
django.core.exceptions.ImproperlyConfigured: Field name transerver
is not valid for model SysTask
日志信息如下:
1 | [2021-02-04 10:35:07] [log.py:log_response:228] ERROR Internal Server Error: /api/v2/migratetasks/sys_task/ |
原因分析:
串行器(serializers.ModeSerializer)中调用的models里面的字段不对而导致的,即在serializers的fields列表里引入了model中不存在的字段
1 | class SysTaskSerializer(serializers.ModelSerializer): |
例如上述序列化中,SysTask
表中没有transerver
字段,在序列化中引入就会引发上述错误
处理:
查看是否引入了不存在的字段,或引入的字段与model中定义的字段不同,删掉或修改即可
python描述器使用指南
定义和简介
一般地,一个描述器是一个包含 “绑定行为” 的对象,对其属性的访问被描述器协议中定义的方法覆盖。这些方法有:__get__()
,__set__()
和 __delete__()
。如果某个对象中定义了这些方法中的任意一个,那么这个对象就可以被称为一个描述器。
属性访问的默认行为是从一个对象的字典中获取、设置或删除属性。例如,a.x
的查找顺序会从 a.__dict__['x']
开始,然后是 type(a).__dict__['x']
,接下来依次查找 type(a)
的基类,不包括元类。 如果找到的值是定义了某个描述器方法的对象,则 Python 可能会重载默认行为并转而发起调用描述器方法。这具体发生在优先级链的哪个环节则要根据所定义的描述器方法及其被调用的方式来决定。
Django 序列化问题
django 序列化类中,若涉及到默认值时,在项目启动后,其值不会再修改,如示例中的date_expired
字段,即为项目启动时的时间
1 | class RegistionSerializer(serializers.ModelSerializer): |
pymysql 使用
连接MySQL
1 | import pymysql |
插入单条数据
1 | try: |
插入多条数据
1 | try: |
异常处理
pymysql.err.OperationalError: (1045, “Access denied for user ‘root’@’43.254.54.249’ (using password: YES)”)
- 更换root密码的认证方式为
mysql_native_password
1 | mysql> ALTER USER 'root'@'43.254.54.249' IDENTIFIED WITH mysql_native_password BY 'QAZ!123#'; |
- 授权
1 | mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'43.254.54.249' IDENTIFIED BY 'mypassword' WITH GRANT OPTION; |
MySql 外键约束 之CASCADE、SET NULL、RESTRICT、NO ACTION分析和作用
MySQL有两种常用的引擎类型:MyISAM和InnoDB。目前只有InnoDB引擎类型支持外键约束。外键用来建立主表与从表的关联关系,为两个表的数据建立连接,约束两个表中数据的一致性和完整性。
主表删除某条记录时,从表中与之对应的记录也必须有相应的改变。一个表可以有一个或多个外键,外键可以为空值,若不为空值,则每一个外键的值必须等于主表中主键的某个值。
定义外键时,需要遵守下列规则:
- 主表必须已经存在于数据库中,或者是当前正在创建的表。如果是后一种情况,则主表与从表是同一个表,这样的表称为自参照表,这种结构称为自参照完整性。
- 必须为主表定义主键。
- 主键不能包含空值,但允许在外键中出现空值。也就是说,只要外键的每个非空值出现在指定的主键中,这个外键的内容就是正确的。
- 在主表的表名后面指定列名或列名的组合。这个列或列的组合必须是主表的主键或候选键。
- 外键中列的数目必须和主表的主键中列的数目相同。
- 外键中列的数据类型必须和主表主键中对应列的数据类型相同。