django操作数据库 ORM
一,数据库连接
创建类
a. 在models.py中先写类
from django.db import models
# 表名是app01_userinfo
class UserInfo(models.Model):
# id列,自增,主键
# 用户名列,字符串类型,指定长度
username = models.CharField(max_length=32)
password = models.CharField(max_length=64)
b. 注册APP,settings中加入app名称
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'app01',
]
c,选定数据库 用sqlite3还是mysql
DATABASES = {
'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME':'dbname', 'USER': 'root', 'PASSWORD': 'xxx', 'HOST': '', 'PORT': '', } } d. 执行命令,
python manage.py makemigrations
python manage.py migrate
********** 注意 ***********
Django默认使用MySQLdb模块链接MySQL,也可安装mysqlclient,https://www.lfd.uci.edu/~gohlke/pythonlibs/#mysqlclient
主动修改为pymysql,在project同名文件夹下的__init__文件中添加如下代码即可:
import pymysql
pymysql.install_as_MySQLdb()
二,数据库增删查改
models: from django.db import models # Create your models here. class userinfo(models.Model):
username = models.CharField(max_length=32)
password = models.CharField(max_length=64) views: from cmbd import models
def orm(request): #创建 插入行
#第一种方法
# models.userinfo.objects.create(username="root",password=123)
#第二种方法
# dic = {"username":"eric","password":123}
# models.userinfo.objects.create(**dic)
#第三种方法
# obj = models.userinfo(username="alex",password=666)
# obj.save() #查询
#result = models.userinfo.objects.all() #返回结果是django内置类,相当于结果列表,查询所有
# result = models.userinfo.objects.filter(username="root",password='123') #按条件与查询,后面还可跟.first() .last() .count()第一个最后一个,共几个
# for row in result:
# print(row.id,row.username,row.password) #更新
# models.userinfo.objects.update(password=669) #更新所有列的密码
# models.userinfo.objects.filter(id=1).update(password=69) #按条件更新 #删除
# models.userinfo.objects.filter(id=2).delete() #删除id为2的行 return HttpResponse('ok')
三,修改表结构
modules中 from django.db import models
class userinfo(models.Model):
username = models.CharField(max_length=32)
password = models.CharField(max_length=60)
email = models.EmailField(max_length=60)
favior = models.CharField(max_length=12,null=True) 直接在上面修改max_length=12,加一行即一个字段,删除一行即删除这个字段,
然后 python manage makemigrations ;python manage migrate
四,字段,参数,元信息等,详见 http://www.cnblogs.com/wupeiqi/articles/5246483.html
字段: django中的 EmailFiled,DateTimeField等其实是django的限制,在mysql中还是字符串类型
字符串类型
数字
时间
二进制
自增(primary_key=True) 字段的参数:
null -> db是否可以为空
default -> 默认值
primary_key -> 主键
db_column -> 列名
db_index -> 索引
unique -> 唯一索引
unique_for_date ->
unique_for_month
unique_for_year
auto_now_add -> 创建时,自动生成时间,保持不变
auto_now -> 更新时间,更新时自动更新为当前时间 # obj = UserGroup.objects.filter(id=1).update(caption='CEO') 这种操作不支持,不会更新,更新时间,以下操作才支持
# obj = UserGroup.objects.filter(id=1).first()
# obj.caption = "CEO"
# obj.save() choices -> django admin中显示下拉框,避免连表查询
blank -> django admin是否可以为空
verbose_name -> django admin显示字段中文
editable -> django admin是否可以被编辑
error_messages -> 错误信息欠
help_text -> django admin提示
validators -> django form ,自定义错误信息(欠) 创建 Django 用户:python manage.py createsuperuser
choices 举例,在数据库中user_type_id存放的是数据 ,但是django后台是显示用户类型汉字 class userinfo(models.Model):
username = models.CharField(max_length=32)
password = models.CharField(max_length=60)
email = models.EmailField(max_length=60)
user_type_choice = (
(1,'超级用户'),
(2,'管理员'),
(3,'普通用户'),
)
user_type_id = models.IntegerField(choices=user_type_choice,default=3)
django操作数据库 ORM的更多相关文章
- django 操作数据库--orm(object relation mapping)---models
思想 django为使用一种新的方式,即:关系对象映射(Object Relational Mapping,简称ORM). PHP:activerecord Java:Hibernate C#:Ent ...
- django之数据库orm
一.数据库的配置 1 django默认支持sqlite,mysql, oracle,postgresql数据库. <1>sqlite django默认使用sqlite的数据库,默认自带sq ...
- Django之 数据库ORM
一.ORM Django的 业务 少不了 跟数据库打交道,不然没有数据库保存一些数据将是一件很糟糕的事情.Django 对 数据库 支持原生的 SQL语句,但更好的对数据库支持,Django自己有一套 ...
- django操作非ORM创建的表
问题:django的ORM怎么连接已存在的表,然后进行增删查改操作? 工作中会遇见很多二次开发的时候,表都是已经创建好的,用django的ORM进行二次开发,怎么操作数据库中的表呢? 下面介绍 ...
- 关于python+django操作数据库中的表
数据库中的表示这样设计的 class C(models.Model): name = models.CharField(max_length=32) class B(models.Model): na ...
- django_4:数据库1——django操作数据库
创建数据库记录(插入) 使用python3 manage.py shell(python3亲测好使) ipython3 manage.py shell(亲测不好使) 方式一. [root@centos ...
- Django之数据库--ORM
一.建立数据库模型类 1.在model里创建模型类.(继承models.Model) from django.db import models # Create your models here. c ...
- 如何使用django操作数据库,向原有表中添加新的字段信息并建立一个多对多的关系?
(注:本人用的pycharm开发工具) 1.在你要添加新字段的app的 models.py 文件中添加需要新增的字段(book表新增authors字段并和author建立多对多关系,author表新增 ...
- django操作数据库之查询F,Q操作 和 seach搜索功能
# F 使用查询条件的值 # # from django.db.models import F # models.Tb1.objects.update(num=F('num')+1) # Q 构建搜索 ...
随机推荐
- [Struts2] <s:property>标签
调用类中的属性,通过get方法调用,而非其属性名调用. 比如A类中有属性a1,a1的get方法是getA1Method(); 相应Action类中的get方法是getA1Action(). 那么需要通 ...
- English trip EM2-LP-4B At School Teacher:Russell
课上内容(Lesson) Where is Loki a student? Loki is in Meten, BaobaoStreet, Chengdu. What is he studying? ...
- npm2 与 npm3的包版本管理
npm2采用严格的包依赖模式 npm install name@1.2.* ---- 1.2.0 <= version <= 1.2.9 npm install name@1.* ---- ...
- pipenv使用总结
一.pipenv默认虚拟环境路径在用户目录下的.\virtualenvs下,不同虚拟环境目录不同,如果要更改为在当前项目根目录下,可以在项目根目录下手动创建.venv目录. 1.linux环境下设置环 ...
- laravel框架中的邮箱发送
1.设置邮件服务器登录 163邮箱设置 POP3/SMTP/IMAP勾选:POP3/SMTP服务 IMAP/SMTP服务 保存 设置客户端授权密码 2.在laravel中配置服务器 打开.env文件 ...
- 【JS】【6】判断一个元素是否在数组中
摘要: 有三种方式: 1,jquery的inArray方法 2,数组的indexOf方法 3,普通的for循环方法 正文: 1,jquery的inArray方法 /** * @param {Objec ...
- JQuery的常用选择器
刚开始学JQuery写的如有错误欢迎批评指正 JQuery拥有的选择器可以让我们更快更方便找到想要的元素,然后对相应的元素进行操作 简单介绍一下一些常用的选择器: 1.基本选择器: 标签名选择器: $ ...
- zzw原创_解决Could not chdir to home directory /test/bdctool: Permission denied一例
1.用命令新建一用户 adduser -d /test/bdctool -m bdctool 2.用新用户登录,报错:Could not chdir to home directory /test/ ...
- .Netcore使用Session
1.使用Session(进程内) 在startup中添加方法 services.AddSession app.UseSession() services.AddDistributedMemoryCa ...
- cocos2d-x js 中创建node的方法
1.精灵Sprite 一共4种创建方式 (1) 根据图片资源路径创建 1 2 3 4 //参数1:图片资源路径 var sprite1 = cc.Sprite.create("res/zif ...