Python Django 数据库操作
1. 建立app
在自己的工程项目目录下输入:
python manage.py startapp myapp(你想建立的app名称)
建立一个叫myapp的app
这样,在你的工程项目目录下会出现一个叫myapp的目录
2. 创建Model
在app目录下进入models.py
输入类似下面的代码:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
|
上面的每个class相当于一个新的table
例外是Many to Many 关系
(注:The exception to the one-class-per-database-table rule is the case ofmany-to-many relationships. In our example models, Book has aManyToManyField called authors. This designates that a book has one ormany authors, but the Bookdatabase table doesn’t get an authorscolumn. Rather, Django creates an additional table – a many-to-many “jointable” – that handles the mapping of books to authors.)
django会自动给每个model配置一个名为id的primary key
(Finally, note we haven’t explicitly defined a primary key in any of thesemodels. Unless you instruct it otherwise, Django automatically gives everymodel an auto-incrementing integer primary key field called id. Each Djangomodel is required to have a single-column primary key.)
3. 安装model
在最初的配置文件settings.py中找到
INSTALLED_APPS
加入自己的app名称,比如'myapp'
用下面的命令验证model的有效性:
python manage.py validate
如果一切正常,你会看到 0errorsfound 消息。如果出错,请检查你输入的模型代码。 错误输出会给出非常有用的错误信息来帮助你修正你的模型。一旦你觉得你的模型可能有问题,运行 pythonmanage.pyvalidate 。 它可以帮助你捕获一些常见的模型定义错误。
4. (真正在DB创建我们设定好的table)create table:
在shell中输入
python manage.py sqlall myapp(步骤1中你创建的app名称)
然后你就可以看见各种SQL语句了,嗯,看上去不错。但是……坑爹的是“sqlall 命令并没有在数据库中真正创建数据表,只是把SQL语句段打印出来,这样你可以看到Django究竟会做些什么。”
所以说下面这个才是真正建表的语句:
python manage.py syncdb
之后你应该能看到诸如:
Creating tables ...
Creating table books_publisher
Creating table books_author
Creating table books_book_authors
Creating table books_book
Installing custom SQL ...
Installing indexes ...
Installed 0 object(s) from 0 fixture(s)
这样的信息
值得注意的是,syncdb 命令是同步你的模型到数据库的一个简单方法。 它会根据 INSTALLED_APPS 里设置的app来检查数据库, 如果表不存在,它就会创建它。 需要注意的是, syncdb 并 不能将模型的修改或删除同步到数据库;如果你修改或删除了一个模型,并想把它提交到数据库,syncdb并不会做出任何处理。
5. (插入一个新的对象) insert:
>>> from books.models import Publisher
>>> p1 = Publisher(name='Apress', address='2855 Telegraph Avenue',
... city='Berkeley', state_province='CA', country='U.S.A.',
... website='http://www.apress.com/')
>>> p1.save()
查看:
>>> publisher_list = Publisher.objects.all()
>>> publisher_list
6. 额外问题:为model加入字符串表现形式
在每个model里加入:
|
1 2 |
|
return 处写上你想要的字符串
7. (选择对象)select:
Publisher.objects.all()
——相当于 select from
Publisher.objects.filter(name='Apress')
——相当于 select from ... where name = 'Apress'
Publisher.objects.filter(name__contains="press")
——相当于 select from ... where name LIKE '%press%';
以上方法,返回的都是一个list (其实是query set)
想直接获取单个对象?用get 方法!
Publisher.objects.get(name="Apress")
8. (对结果排序) order:
Publisher.objects.order_by("name")
——相当于 select from ... ORDER BY name;
多项排序:
Publisher.objects.order_by("state_province", "address")
逆向排序:
Publisher.objects.order_by("-name")
连锁查询:
Publisher.objects.filter(country="U.S.A.").order_by("-name")
9. (更新对象)update:
1)使用save()方法:
|
1 2 3 |
|
——相当于
|
1 2 3 4 5 6 7 8 |
|
!!所有的列都被更新了!这也太naive了吧!
2)用update() 方法才比较好:
Publisher.objects.filter(id=52).update(name='Apress Publishing')
——相当于
|
1 2 3 |
|
可以对多行同时进行更新:
Publisher.objects.all().update(country='USA')
update()方法会返回一个整型数值,表示受影响的记录条数
10. (删除对象)delete:调用该对象的delete()方法即可:
p = Publisher.objects.get(name="O'Reilly")
p.delete()
一旦使用all()方法,所有数据将会被删除:
Publisher.objects.all().delete()
参考:http://www.djangobook.com/en/2.0/chapter05.html
http://djangobook.py3k.cn/2.0/chapter05/
Python Django 数据库操作的更多相关文章
- 从命令行运行django数据库操作
从命令行运行django数据库操作,报错: django.core.exceptions.ImproperlyConfigured: Requested setting DEFAULT_INDEX_T ...
- python之数据库操作(sqlite)
python之数据库操作(sqlite) 不像常见的客户端/服务器结构范例,SQLite引擎不是个程序与之通信的独立进程,而是连接到程序中成为它的一个主要部分.所以主要的通信协议是在编程语言内的直接A ...
- Django数据库操作(增删改查)
Django数据库操作(增删改查) 创建数据库中的一个表 class Business(models.Model): #自动创建ID列 caption = models.CharField(max_l ...
- python sqlite3 数据库操作
python sqlite3 数据库操作 SQLite3是python的内置模块,是一款非常小巧的嵌入式开源数据库软件. 1. 导入Python SQLite数据库模块 import sqlite3 ...
- Django 数据库操作
Django 数据库操作 Django运算表达式与Q对象/F对象 1 模型查询 概述: 1 查询集:表示从数据库中获取的对象的集合 2 查询集可以有多个过滤器,通过 逻辑运算符连接 3 过滤器就是一个 ...
- django数据库操作和中间件
数据库配置 django的数据库相关表配置在models.py文件中,数据库的连接相关信息配置在settings.py中 models.py相关相关参数配置 from django.db import ...
- python之数据库操作
数据库操作 Python 操作 Mysql 模块的安装 1 2 3 4 5 linux: yum install MySQL-python window: http://files ...
- Django数据库操作
刚学到Django的数据库操作,把它记录下来,方便以后查看: 在Django中定义数据库表,并使用Django提供的方法来对数据库进行操作(增.删.改.查) 1.定义3个数据库表: class Gro ...
- Python的数据库操作(Sqlalchemy)
ORM 全称 Object Relational Mapping, 翻译过来叫对象关系映射.简单的说,ORM 将数据库中的表与面向对象语言中的类建立了一种对应关系.这样,我们要操作数据库,数据库中的表 ...
随机推荐
- ACCESS中计算日均值
如图所示,现有时间数据的时间字段是精确到时分秒的,现在需要计算PM2.5的日平均值,因此在查询时需要过滤时间字段的格式,去掉时分秒部分,只提取年月日部分. 查找资料,发现一般用CONVERT()函数实 ...
- 为Node.js编写组件的几种方式
本文主要备忘为Node.js编写组件的三种实现:纯js实现.v8 API实现(同步&异步).借助swig框架实现. 关键字:Node.js.C++.v8.swig.异步.回调. 简介 首先介绍 ...
- POJ 1426 Find The Multiple
注:本人英语很渣,题目大意大多来自百度~=0= 这个题有点坑,答案不唯一 题目大意:给你一个数n, 你需要输出的是一个由1和0组成的数,此数能被n整除 解题思路:用s = 1做数的起点, ...
- 无废话SharePoint入门教程四[创建SharePoint母版页]
一.前言 文章成体系,如果有不明白的地方请查看前面的文章. 二.目录 1.创建HTML页面 2.将HTML文件转换为SharePoint母版页 3.在 SPD中修改母版页“PlaceHolderMai ...
- 《企业应用架构模式》(POEAA)读书笔记
原文地址:<企业应用架构模式>(POEAA)读书笔记作者:邹齐龙(技术-5013 什么是架构 Rolph Johnson认为:架构是一种主观上的东西,是专家级的项目开发人员对系统设计的一些 ...
- C#中获取当前时间:System.DateTime.Now.ToString()用法
//2008年4月24日 System.DateTime.Now.ToString("D"); //2008-4-24 System.DateTime.Now.ToString(& ...
- 【图像处理】【SEED-VPM】5.uImage的烧写 & NFS烧写文件系统
基于 TFTP 烧写 uImage 当用户对 SEED-VPM6467 下的内核驱动源码进行调整或者添加新的设备驱动后,需要对内核进行重新编译配置,编译生成内核镜像后,可以通过 tftp 下载到 SE ...
- MySQL5.5绿色版1067
mysql的绿色安装版,按照很多文章进行配置,会出现 配置文件里面添加了 [client] default-character-set=utf8 [mysqld] default-character- ...
- Bootstrap <基础三十二>模态框(Modal)插件
模态框(Modal)是覆盖在父窗体上的子窗体.通常,目的是显示来自一个单独的源的内容,可以在不离开父窗体的情况下有一些互动.子窗体可提供信息.交互等. 如果您想要单独引用该插件的功能,那么您需要引用 ...
- MicroERP软件更新记录1.1
MicroERP软件更新记录 最新版本:1.1 1.增加固定资产检修.租赁.转移记录 2.增加产品质检单 3.增加零售单(收银台) 4.支持各种主流关系型数据库 5.完善了数据字典,如加入原材料材质. ...