上一篇文章写了一些基本的Django操作,下面重点介绍数据库的内容。

对象之间的关系:

  1. 一对一
  2. 一对多
  3. 多对多

1.一对多

先演示一对多的关系,多个blog对应一个名字, 修改blog/models.py

class Entry(models.Model):
name = models.CharField(max_length=30) def __unicode__(self):
return self.name class Blog(models.Model):
name = models.CharField(max_length=30)
entry = models.ForeignKey(Entry) def __unicode__(self):
return self.name
#在djang1.9以后,数据库同步执行指令如下:
#同步数据库接口(注意需要切换至python project工作空间所在路径)
python manage.py makemigrations
#同步数据
python manage.py migrate

填入数据时,必须首先填入外键,即这里的name。

学会基本的创建和查询操作

from blog.models import Entry, Blog
entry1 = Entry.objects.create(name='alen')
entry2 = Entry.objects.create(name='lee')
entry3 = Entry.objects.create(name='anna') blog1 = Blog.objects.create(name='alen_blog1', entry=entry1)
blog1.entry
blog1.id
entry1.blog_set.all()

2.多对多

作者和书之间的关系,多对多。

class Author(models.Model):
name = models.CharField(max_length=30) def __unicode__(self):
return self.name class Book(models.Model):
name = models.CharField(max_length=30)
authors = models.ManyToManyField(Author) def __unicode__(self):
return self.name
from blog.models import Author, Book
Author.objects.create(name='Alen')
Author.objects.create(name='eric')
Author.objects.create(name='lee')
Author.objects.create(name='zhang')
authors = Author.objects.all()
authors b1 = Book()
b1.name = 'python book1'
b1.save()
b1.authors.add()
alen = Author.objects.get(name__exact='Alen')
b1.authors.add(alen)
b1.authors.add(authors[1])
b1.authors.all()
b1.authors.add(authors[2])
b1.authors.add(authors[3])
b1.authors.all()
b1.authors.remove(alen)
b1.authors.all()
b1.authors.filter(name__exact='lee')
alen.book_set.all()
alen.book_set.add(b1)
alen.book_set.create(name='python book2')
books = Book.objects.all()
alen.book_set.remove(book[0])
alen.book_set.remove(books[0])
alen.book_set.all()

3.数据库数据网页显示

插一句,今天居然遇到了Ubuntu可以ssh连接,却无法上网的尴尬局面,估计是配置Apache的时候把系统搞乱了。搞了好久才发现是DNS解析问题,导致无法使用域名,但可以使用IP。

编辑/etc/resolv.conf文件

添加一行

nameserver  8.8.8.8

无意中把Django给卸载了,又重装了,以为网站访问不了,其实不用怕,很简单,创建prj和app,然后全部copy过去,网站就会恢复啦。

4.管理界面

sex_choices = {
('f', 'female'),
('m', 'male'),
}
class User(models.Model):
name = models.CharField(max_length=30)
sex = models.CharField(max_length=1, choices=sex_choices)

为blog应用添加用户。

django使用bootstrap快速美化 admin后台(新版不可用)

使用suit-v2美化Django Admin(兼容Django新版本!)

admin后天样式丢失,怎么解决?

Django MySQL数据库操作的更多相关文章

  1. Django 2.0 学习(14):Django ORM 数据库操作(上)

    Django ORM 数据库操作(上) ORM介绍 映射关系: 数据库表名 ---------->类名:数据库字段 ---------->类属性:数据库表一行数据 ----------&g ...

  2. php : mysql数据库操作类演示

    设计目标: 1,该类一实例化,就可以自动连接上mysql数据库: 2,该类可以单独去设定要使用的连接编码(set names XXX) 3,该类可以单独去设定要使用的数据库(use XXX): 4,可 ...

  3. php MySQL数据库操作类源代码

    php MySQL数据库操作类源代码: <?php class MySQL{ private $host; //服务器地址 private $name; //登录账号 private $pwd; ...

  4. 设计模式 - 单例模式mysql数据库操作类

    待续... index.php 调用方法: <?php header('Content-Type:text/html; charset=utf8'); require 'instance.php ...

  5. MySQL数据库操作常用命令

    MySQL数据库操作常用命令DOS连接数据库1.安装MySQL配置好环境2.运行cmd命令net start mysql3.找到mysql文件根目录输入命令mysql -h localhost -u ...

  6. Python/MySQL(四、MySQL数据库操作)

    Python/MySQL(四.MySQL数据库操作) 一.数据库条件语句: case when id>9 then ture else false 二.三元运算: if(isnull(xx)0, ...

  7. Java通过JDBC 进行MySQL数据库操作

    转自: http://blog.csdn.net/tobetheender/article/details/52772157 Java通过JDBC 进行MySQL数据库操作 原创 2016年10月10 ...

  8. Mysql 数据库操作之DDL、DML、DQL语句操作

    Mysql 数据库操作之DDL.DML.DQL语句操作 设置数据库用户名密码 l  Show databases 查看数据库列表信息 l  查看数据库中的数据表信息 ,格式: use 数据库名: sh ...

  9. Python进行MySQL数据库操作

    最近开始玩Python,慢慢开始喜欢上它了,以前都是用shell来实现一些自动化或者监控的操作,现在用Python来实现,感觉更棒,Python是一门很强大的面向对象语言,所以作为一个运维DBA或者运 ...

随机推荐

  1. Linux命令:删除与恢复命令

    敲命令按以下顺序 ①vim filename ②e ③i ④ESC 删除命令: x(小写):删除光标所在处字符. dd:删除光标所在的行. D:删除从光标所在之处开始直到该行末尾的全部字符. < ...

  2. json-lib-2.4-jdk15.jar所需全部JAR包.rar java jsoup解析开彩网api接口json数据实例

    json-lib-2.4-jdk15.jar所需全部JAR包.rar  java jsoup解析开彩网api接口json数据实例 json-lib-2.4-jdk15.jar所需全部JAR包.rar  ...

  3. Centos7下PHP的卸载与安装nginx

    Centos7下PHP的卸载与安装nginx CentOS上PHP完全卸载,想把PHP卸载干净,直接用yum的remove命令是不行的,需要查看有多少rpm包,然后按照依赖顺序逐一卸载. 1.首先查看 ...

  4. JavaScript 方法扩展

    一.String全部替换方法 String.prototype.replaceAll = function(s1, s2){ return this.replace(new RegExp(s1, &q ...

  5. 《网络攻防》实验五:MSF基础应用

    IE浏览器渗透攻击--MS11050安全漏洞 实验准备 1.两台虚拟机,其中一台为kali,一台为Windows Xp Professional(两台虚拟机可以相互间ping通). 2.亚军同学的指导 ...

  6. 20145301赵嘉鑫 《网络对抗》Exp9 Web安全基础实践

    20145301赵嘉鑫 <网络对抗>Exp9 Web安全基础实践 实验后回答问题 (1)SQL注入攻击原理,如何防御 SQL注入攻击原理:SQL 是一门 ANSI 的标准计算机语言,用来访 ...

  7. vs2012旗舰版 有效注册密钥

    Microsoft Visual Studio Ultimate 2012 旗舰版 有效注册密钥: YKCW6-BPFPF-BT8C9-7DCTH-QXGWC

  8. Python3基础 raise 产生RuntimeError 异常

             Python : 3.7.0          OS : Ubuntu 18.04.1 LTS         IDE : PyCharm 2018.2.4       Conda ...

  9. JavaScript 小知识

    1.var 变量 <script type="text/javascript"> var a = "hong"; var fun = functio ...

  10. [Redis] - 高并发下Redis缓存穿透解决

    高并发情况下,可能都要访问数据库,因为同时访问的方法,这时需要加入同步锁,当其中一个缓存获取后,其它的就要通过缓存获取数据. 方法一: 在方法上加上同步锁 synchronized //加同步锁,解决 ...