11 ORM简介
记录一次报错
从windows迁移到Centos后运行报错
django.db.utils.InternalError: Packet sequence number wrong - got 1 expected 0
服务器IP为10.10.10.12
开发电脑为10.10.12.100
在开发电脑上没问题,如下是django配置
但是迁移到服务器后就不行, 连接报错。
原因:用10.10.10.12去连接10.10.10.12数据库,不会当连接127.0.0.1处理,所以没权限。
处理办法:数据库添加user1,从10.10.10.12访问权限,或者django数据库服务器设置为127.0.0.1
创建models
数据类型
- AutoField:自增数据段
- CharField:字符串,max_length
- DateField:日期
- DecimalField:小数,max_digits,decimal_places
- FileField:upload_to='avatars/'文件保存目录,default='avatars/default.png'指定默认值
- ImageField
- verbose_name:别名
获取数据别名:
models.UserInfo._meta.get_field('title').verbose_name即可获取UserInfo表title字段的verbose_name
media文件配置见cnblog项目
FileField类型的参数和ImageField类型参数类似
- 必须接收文件对象,ImageField必须是图片。在传入文件对象的时候,django会自动下载该文件,并保存到upload_to文件夹中,如果没有改文件夹则自动创建
- 如果配置过media文件夹,则将文件保存在media文件夹下
- 在数据库中存放的是该文件的相对路径,而非文件对象
参数
- primary_key添加主键约束字段
- unique唯一性约束
- verbose_name详细显示名称
配置数据库
setting.py
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
DATABASES={ "default":{ "ENGINE":'django.db.backends.mysql', 'NAME':'orm', 'USER':'root', "PASSWORD":'123.com', 'HOST':'127.0.0.1', 'PORT':3306 } }
Django默认导入的是MySQLdb,但是MySQLdb在py3上支持有问题,py3用pymysql,所以需要在项目__init__.py文件中添加如下代码
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
import pymysql pymysql.install_as_MySQLdb()
INSTALLED_APP中注册app
由模型生产表
python manage.py makemigrations
python manage.py migrate
即迁移数据库
数据库中生成的表
打开ORM操作日志,需在setting中添加如下代码
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
LOGGING = { 'version': 1, 'disable_existing_loggers': False, 'handlers': { 'console':{ 'level':'DEBUG', 'class':'logging.StreamHandler', }, }, 'loggers': { 'django.db.backends': { 'handlers': ['console'], 'propagate': True, 'level':'DEBUG', }, } }