django笔记(3)-数据库操作
一:路由系统
url
1.url(r'^index/', views.index),url(r'^home/',views.Home.as_view()), 一个url对应一个函数或一个类
2.url(r'^detail-(\d+).html',views.detail), 一类url对应一个函数或一个类 动态url
3.url(r'^detail-(?P<nid>\d+)-(?P<uid>\d+).html',views.detail), 正则表达式 第一数字匹配赋值给nid 在函数里面就不用考虑顺序 比较常用 动态url
ps: def detail(request,*args,**kwargs):
pass
实战:
1.
url(r'^detail-(\d+)-(\d+).html',views.detail)
def func(request,nid,uid):
pass
def func(request,*args):
args=(2,6)
pass
2.
url(r'^detail-(?P<nid>\d+)-(?P<uid>\d+).html',views.detail)
def func(request,nid,uid):
pass
def func(request,**kwargs):
kwargs={'nid':1,'uid':3}
4.name:方便提交表单
对URL路由关系进行命名,以后可以根据此名称自动生成自己想要的URL
url(r'^index999999999/', views.index,name='indexx'),
def func(request,*args,**kwargs):
from django.urls import reverse
reverse('indexx') #生成index999999999
url(r'^index999999999/(\d+)/(\d+)/', views.index,name='indexx'),
def func(request,*args,**kwargs):
from django.urls import reverse
reverse('indexx',args=(1,6)) #生成index999999999/1/6
url(r'^index999999999/(?P<nid>\d+)/(?P<uid>\d+)/', views.index,name='indexx'),
def func(request,*args,**kwargs):
from django.urls import reverse
reverse('indexx',kwargs=('nid':11,'uid':66)) #生成index999999999/11/66
xxxx.html
{% url "indexx" %} #对应index999999999
{% url "indexx" 1 6 %} #对应index999999999/1/6
{% url "indexx" nid=11 uid=66 %} #对应index999999999/11/66
模板语言里面:
{% url 'indexxx' %}
{% url 'indexxx' 8 6 %}
注:{{ request.path_info }} 当前页面url
5.
二:视图
request.POST
request.GET
request.FILES
#获取checkbox等多选内容
request.POST.getlist()
#上传文件,form标签做特殊设置enctype="multipart/form-data"
obj=request.FILES.get('fafafa')
obj.name
f=open(obj.name,mod='wb')
for item in obj.chunks():
f.write(item)
f.close()
FBV function base view
url.py
index -->函数名
view.py
def 函数(request):
...
CBV class base view 执行类里面的指定的方法
/index/ -->类
建议两者都用
三:模板
四:orm操作
select * from tb where id>1
#对应关系
models.tb.objects.filter(id__gt=1)
models.tb.objects.filter(id=1)
model.tb.objects.filter(id__lt=1)
a.创建类(代码)
from django.db import models
class UserInfo(models.Model):
# id列,自增,主键
# 用户名列,字符串类型,指定长度
username=models.CharField(max_length=32)
password=models.CharField(max_length=64)
b.注册app:
settings.py:
INSTALLED_APPS =[
'''
'app01',
]
c.执行命令:
python manage.py makemigrations 生成migrations下的文件
python manage.py migrate 根据生成的文件创建表和数据库
d.连接mysql
django默认使用MySQLdb模块连接mysql,但目前py3.x没有这个模块
修改为pymsql
在project下的__init__.py
import pymysql
pymysql.install_as_MySQLdb()
注: base.py将36行注释
if version < (1, 3, 13):
raise ImproperlyConfigured('mysqlclient 1.3.13 or newer is required; you have %s.' % Database.__version__)
File "C:\Python37\lib\site-packages\django\db\backends\mysql\operations.py", line 146, in last_executed_query
query = query.decode(errors='replace')
AttributeError: 'str' object has no attribute 'decode'
解决办法:打开此文件把146行的decode修改为encode
如果已经有migrations文件就直接执行 python manage.py migrate 创建表
1.根据类(代码)自动创建数据库表
app下的model.py
字段:字符串
数字
时间
二进制
自增(primary_key=True)
参数:
null 数据库中字段是否可以为空 null=True
db_column 数据库中字段的列名 db_column='xx'
default 数据库中字段的默认值 default='xx'
primary_key 数据库中字段是否为主键 primary_key=True
db_index 数据库中字段是否可以建立索引 db_index=True
unique 数据库中字段是否可以建立唯一索引 unique=True
unique_for_date 数据库中字段【日期】部分是否可以建立唯一索引 unique_for_date=True
unique_for_month 数据库中字段【月】部分是否可以建立唯一索引 unique_for_month=True
unique_for_year 数据库中字段【年】部分是否可以建立唯一索引 unique_for_year=True
auto_now_add 创建时 自动生成创建时间 auto_now_add=True
auto_now 更新时 自动生成更改时间 auto_now=True
obj=models.UserGroup.objects.filter(uid='1').first() 更新uptime用这种方法
obj.caption="DBA"
obj.save()
verbose_name django admin中显示的字段名称 verbose_name="姓名"
blank django admin中是否允许用户输入为空 blank=True
editable django admin中是否可以编辑 editable=False
help_text django admin中该字段的提示信息 help_text="邮件"
choices django admin中显示选择框的内容,用不变动的数据放在内存中从而避免跨表操作
例:user_type_choice=(
(1,'super user'),
(2,'normal user'),
(3,'normal normal user'),
)
user_type_id=models.IntegerField(choices=user_type_choice,default=1)
error_messages 自定义错误信息(字典类型),从而定制想要显示的错误信息;
字典健:null, blank, invalid, invalid_choice, unique, and unique_for_date
如:{'null': "不能为空.", 'invalid': '格式错误'}
validators 自定义错误验证(列表类型),从而定制想要的验证规则
2.根据类(代码)对数据库表中的数据进行各种操作
一对多:
a.外键
b.外键字段_id
c.外键id创建数据 models.tb.object.create(name='root',user_group_id=1)
d.
user_list=models.tb.object.all()
for row in user_list:
row.id
row.user_group_id
row.user_group.caption 跨表操作
数据库配置
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME':'dbname',
'USER': 'root',
'PASSWORD': 'xxx',
'HOST': '',
'PORT': '',
}
}
https://www.cnblogs.com/wupeiqi/articles/5237704.html
创建外键
models.ForeignKey("关联的外表",to_field='外表的主键')
class UserType(models.Model):
caption=modules.CharField(max_length=32)
id caption
1 普通用户
2.VIP用户
3.游客
class User(models.Model):
age=models.IntergerField()
name=models.CharField(max_length=10)
user_type=models.ForeignKey('UserType',to_field='id')
name age user_type_id
mark 19 1
gasol 31 2
lebrom 29 3
django笔记(3)-数据库操作的更多相关文章
- django 笔记4 数据库操作
django操作数据库 orm操作 对应关系 models.tb.objects.filter(id__gt=) models.tb.objects.filter(id=) models.tb.obj ...
- 关于Django中的数据库操作API之distinct去重的一个误传
转载自http://www.360doc.com/content/18/0731/18/58287567_774731201.shtml django提供的数据库操作API中的distinct()函数 ...
- Django【第5篇】:Django之ORM数据库操作
django之ORM数据库操作 一.ORM介绍 映射关系: 表名 -------------------->类名 字段-------------------->属性 表记录-------- ...
- 【Django】Django model与数据库操作对应关系(转)
Django对数据库的操作分用到三个类:Manager.QuerySet.Model. Manager的主要功能定义表级方法(表级方法就是影响一条或多条记录的方法),我们可以以models.Manag ...
- django之ORM数据库操作
一.ORM介绍 映射关系: 表名 -------------------->类名 字段-------------------->属性 表记录----------------->类实例 ...
- django基础之数据库操作
Django 自称是“最适合开发有限期的完美WEB框架”.本文参考<Django web开发指南>,快速搭建一个blog 出来,在中间涉及诸多知识点,这里不会详细说明,如果你是第一次接触D ...
- Django框架----ORM数据库操作
一.ORM介绍 ORM概念 对象关系映射(Object Relational Mapping,简称ORM)模式是一种为了解决面向对象与关系数据库存在的互不匹配的现象的技术. 简单的说,ORM是通过使用 ...
- 用户增删改查 django生命周期 数据库操作
一 django生命周期 1 浏览器输入一个请求(get/post)2 响应到django程序中3 执行到url,url通过请求的地址匹配到不同的视图函数4 执行对应的视图函数,此过程可以查询数据库, ...
- ThinkPHP 学习笔记 ( 三 ) 数据库操作之数据表模型和基础模型 ( Model )
//TP 恶补ing... 一.定义数据表模型 1.模型映射 要测试数据库是否正常连接,最直接的办法就是在当前控制器中实例化数据表,然后使用 dump 函数输出,查看数据库的链接状态.代码: publ ...
- Django简单的数据库操作
当然,本篇的前提是你已经配置好了相关的环境,这里就不详细介绍. 一. 在settings.py文件中设置数据库属性. 如下: DATABASES = { 'default': { 'ENGINE': ...
随机推荐
- sql---一条sql查询语句是如何查询的、更新的
mysql分为server层和层存储引擎层 类型:InnoDB.MyISAM 查询过程 连接器:与客户端建立连接.获得权限.维持和管理命令 查询缓存:弊大于利,在8.0之后已去除 分析器:对sql语法 ...
- Ubuntu修改密码和用户名
Ubuntu是一个Linux操作系统,修改密码和用户名是有危险的动作,请谨慎修改. 一.Ubuntu修改密码和用户名 Ubuntu更改密码步骤:1.进入Ubuntu,打开一个终端,输入 sudo su ...
- ABAQUS阻尼设置
结构阻尼 瑞利阻尼
- go json omitempty 关键字 脱坑
用法 大家对于 json 和 struct 之间的转换一定不陌生,为了将代码中的结构体与 json 数据解耦,通常我们会在结构体的 field 类型后加上解释说明,例如在表示一个地址的时候, json ...
- gazebo小车模型(附带仿真环境)
博客地址:https://www.cnblogs.com/zylyehuo/ 参考链接 1.(https://blog.csdn.net/qq_43406338/article/details/109 ...
- Linux® 容器
是与系统其他部分隔离开的一系列进程.运行这些进程所需的所有文件都由另一个镜像提供,这意味着从开发到测试再到生产的整个过程中,Linux 容器都具有可移植性和一致性.因而,相对于依赖重复传统测试环境的开 ...
- 深入理解Hadoop读书笔记-4
背景 公司的物流业务系统目前实现了使用storm集群进行过门事件的实时计算处理,但是还有一个需求,我们需要存储每个标签上传的每条明细数据,然后进行定期的标签报表统计,这个是目前的实时计算框架无法满足的 ...
- Ubuntu24使用Wine运行Windows程序安装微信
Ubuntu24使用Wine运行Windows程序安装微信 2024.11.8:好消息!微信发布Linux版本了,微信主站Linux版本客户端下载页面:https://linux.weixin.qq. ...
- 把postgreSQL的表导入SQLite
万能的互联网,一查一大堆废话,几乎搞不定.现将查到的资料结合实践概况如下,对不对也不清楚,反正可以跑了. 1.把PostgreSQL的表SQL语句复制出来 CREATE TABLE "mai ...
- FireDAC 下的批量 SQL 命令执行
一.{逐条插入} procedure TForm1.Button1Click(Sender: TObject); const strInsert = 'INSERT INTO MyTable(Name ...