第五章 模型

郑玉虎 10-08 03:47

应改成“第五章”

cymoo 09-13 09:33

对啊,是“第五章”,轻微强迫症对这个有点不习惯

hehe 12-17 07:42

你们这些强迫症。。。。唉。。。。

penuel 01-29 09:27

改了吧,强迫症受不了

Matthew 04-22 09:13

嗯同意,觉得看的不顺眼

mr.liu 08-03 02:32

楼上都是处女座啊。

SanguineSB 10-15 03:33

哈哈

吴某人 04-03 16:22

我觉得「第5章」好看

猪头哥哥 11-30 08:11

第五章更好 嘻嘻

mzfly 12-23 10:53

233

对标题的评论会显示在这里

在第三章,我们讲述了用 Django 建造网站的基本途径: 建立视图和 URLConf 。 正如我们所阐述的,视图负责处理一些主观逻辑,然后返回响应结果。 作为例子之一,我们的主观逻辑是要计算当前的日期和时间。

匿名读者 01-14 10:32

相应!=响应

xing.lin 08-19 08:26

我没有看到英文,估计是 related 或者 response 所以我说2个词都可以

Sheki 04-20 09:52

大多数章节都是中文数字,但是却有几章是阿拉伯数字的,比如这个第5章,后面章节还有些也是。

jowett.zhang 01-26 14:23

写一个内容小结: 1. 讲了一下MVC和MTV模式的概念 2. 数据库如何进行设置 3. 如何创建用类的映射来创建数据库,和外键 4. unicode的使用 5. 插入,查询,过滤,排序,更新,删除等操作

skyfisher 04-02 01:39

赞jowett.zhang的总结,如果每章开头都有这么个总结,对新手来讲学习起来就快速多了。

chifa 04-25 03:58

看完之后回头看jowett.zhang这个小结,整个人升华了.

zcy 05-02 16:21

本章有大段代码引用的是DjangoBook1.0的版本,希望更正.

何文祥 05-16 01:34

应该是在第四章

byrain 07-19 08:55

赞!

xiongneng 12-10 09:24

赞一下jowett.zhang童鞋的总结

gg 12-25 05:27

gg

zjuysw 02-10 02:43

如果每个前面有个小目录也不错。前面某位童鞋说有个内容总结,我就得很赞。(其实这两个意思貌似很近)

匿名读者 06-18 09:26

fuck

stevenlee87 06-23 05:41

赞jowett.zhang的总结

Xavier 07-16 09:30

建议学点数据库的基础再来看这篇文章。

lumia.xu 03-07 02:07

对于没有数据库基础的人(比如第一遍看的我)来说确实比较难以理解

匿名读者 12-21 11:42

2018年的第一个也是最后一个读者。。。。。

对这一段的评论会显示在这里

在当代 Web 应用中,主观逻辑经常牵涉到与数据库的交互。 数据库驱动网站 在后台连接数据库服务器,从中取出一些数据,然后在 Web 页面用漂亮的格式展示这些数据。 这个网站也可能会向访问者提供修改数据库数据的方法。

nice_day 11-27 08:21

数据库使用包含很多内容

shit 11-05 10:11

修改数据库的方法是?比如注册账号吗

QQasdhy 05-05 13:37

数据库的修改包括涉及所有网站动态内容数据的数据库增删改查交互操作

猪头哥哥 11-30 08:13

数据库 基本来说就是增删查改四种操作 每种操作里面各有学问

Nginx 09-09 15:43

“当代”,翻译有点生硬

对这一段的评论会显示在这里

许多复杂的网站都提供了以上两个功能的某种结合。 例如 Amazon.com 就是一个数据库驱动站点的良好范例。 本质上,每个产品页面都是数据库中数据以 HTML格式进行的展现,而当你发表客户评论时,该评论被插入评论数据库中。

d 12-03 07:21

d

潮湿了我押韵的心情 12-15 02:07

两个功能指的是:访问数据库 和 修改数据库

Mawuhui 08-30 08:55

两个功能是指: 访问数据库获取数据; 在页面进行漂亮的展示;

1024节 10-24 03:41

大多数web应用都要涉及到数据库的增删改查

对这一段的评论会显示在这里

由于先天具备 Python 简单而强大的数据库查询执行方法,Django 非常适合开发数据库驱动网站。 本章深入介绍了该功能: Django 数据库层。

d 12-03 07:22

d

penuel 01-29 09:30

Django不是只支持 sqlite,mysql,oracle,postraSQL吗

对这一段的评论会显示在这里

(注意: 尽管对 Django 数据库层的使用中并不特别强调这点,但是我们还是强烈建议您掌握一些数据库和 SQL 原理。 对这些概念的介绍超越了本书的范围,但就算你是数据库方面的菜鸟,我们也建议你继续阅读。 你也许能够跟上进度,并在上下文学习过程中掌握一些概念。)

对这一段的评论会显示在这里

在视图中进行数据库查询的笨方法

对这一段的评论会显示在这里

正如第三章详细介绍的那个在视图中输出 HTML 的笨方法(通过在视图里对文本直接硬编码HTML),在视图中也有笨方法可以从数据库中获取数据。 很简单: 用现有的任何 Python 类库执行一条 SQL 查询并对结果进行一些处理。

对这一段的评论会显示在这里

在本例的视图中,我们使用了 MySQLdb 类库(可以从 http://www.djangoproject.com/r/python-mysql/ 获得)来连接 MySQL 数据库,取回一些记录,将它们提供给模板以显示一个网页:

lighall 09-05 14:07

这个版本不支持python2.7以上的

oukai 02-27 06:46

我也表示不会安装 可否传个教程

jack 04-28 02:50

yum install MySQL-python

leadtoit 04-28 09:46

ubuntu:sudo apt-get install python-mysqldb

junliang 05-23 06:55

win32 python2.6--Django-1.4.tar.gz--用的远程mysql,不想为了mysqldb本地装个mysql,所以用的 MySQL-python-1.2.2.win32-py2.6.exe。

Number_tu 07-30 13:37

我花了两个半钟,终于装好了。

slee 08-09 11:48

下载支持python2.7的1.2.3 exe版本就ok 下载zip版本貌似需要先安装setuptools 在python setup.py install安装

王小谟 09-05 02:36

如果在mac 上安装 有问题的话可以参考我的点点blog http://nooper.diandian.com/post/2012-09-03/40038746678 自己写的一个总结

can. 11-13 08:41

坑爹呢..前面不是说推荐postgres的嘛

skyfisher 04-02 01:42

我之前架好的wamp(windows+apache+mysql+php)的mysql数据直接就可以用了。python对数据库的操作确实很方便。

qq_345421243 05-09 08:22

果然坑爹,例子咋不用推荐的那个数据库

zzm 07-18 08:11

搞了一天都装不上mysql 。。。哭 系统mac 10.5 powerpc

Jasper 09-20 07:57

python2.7,數據庫免安裝

Lyrus 12-08 07:32

安装MySQLdb 2.6出现的问题 (1).ImportError: DLL load failed: 找不到指定的模块。 >>> import MySQLdb Traceback (most recent call last): File "<stdin>", line 1, in <module> File "D:\ProgramTools\Python2.6\Lib\site-packages\MySQLdb\__init__.py", line 19, in <module> import _mysql ImportError: DLL load failed: 找不到指定的模块。 解决方法:下载libmmd.dll libguide40.dll libmysql.dll(必须) dll文件并复制System32 和python26\Lib\site-packages 目录之下; (2).ImportError: DLL load failed: 找不到指定的模块。 >>> import MySQLdb D:\ProgramTools\Python2.6\Lib\site-packages\MySQLdb\__init__.py:34: DeprecationWarning: the sets module is deprecated from sets import ImmutableSet 解决方法: 1) 在文件 "__init__.py"(文件位置位于错误提示位置,如上面提示错误为D:\ProgramTools\Python2.6\Lib\site-packages\MySQLdb\__init__.py,即为需修改文件路径), 注释掉: from sets import ImmutableSet class DBAPISet(ImmutableSet): 新增: class DBAPISet(frozenset) 2) 在文件中"converters.py", 注释掉 from sets import BaseSet, Set 这一句话。 3) 在文件中"converters.py", 修改 "Set" 成为 "set" ( 只有两个地方需要修改): 大概 line 48: return Set([ i for i in s.split(',') if i ]) ——> return set([ i for i in s.split(',') if i ]) 大概 line 128: Set: Set2Str, ——> set: Set2Str

ubuntu 安装数据库方法 01-02 02:06

sudo apt-get install MySQL-server

ubuntu 安装数据库方法 01-02 02:13

sudo apt-get install mysql-client

ubuntu 安装数据库方法 01-02 02:35

mysql -u root -p <br> create database mydb; <注意分号> show databases; <br> quit <br> su <br> cd /var/lib/mysql/ <br> ls mydb <br>

RH 02-03 09:59

为什么不在配置文件里面配置数据库。还敲代码,以后每次都敲?

keetron 02-23 11:39

win64, python2.6.x: http://www.codegood.com/archives/4

飞哥 05-02 15:21

win7 64 python3.3的悲剧了!

misutt 10-18 12:26

坑爹啊,之前不是推荐postgres2嘛,我倒腾了几个小时才安装好,现在居然用MySQL……哭死(╯‵□′)╯︵┻━┻

jeff 11-19 01:39

python3.4 用mysql connector代替mysqldb,亲测可以

酒池墨林 12-24 02:05

pip install MySQL-python

酒池墨林 12-24 02:12

然后按照提示去这里下载vc库: http://aka.ms/vcpython27

penuel 01-29 09:33

OS X 或者有pip,easy_install的都可以用这个 easy_install mysql-python or pip install mysql-python

asdasd 03-14 10:34

Windows7 64位,成功实现Python往MySQL写数据

吴某人 04-03 16:30

感谢楼上提供的乌邦图mysql安装方法

Neinaa 04-17 08:58

http://dev.mysql.com/downloads/connector/python/ 官网上支持Win64位Python3的,启动msi安装包之后根本没有反应~ 郁闷中……

glimmer 05-29 02:23

windows下python2.7安装mysql 先检查自己是不是已经安装了这个模块 极其简单:在Python的命令行中输入import MySQLdb,如果没有报错,那就已经安装了。 如果未安装,那么 其实就是随便找个地方按下win+R,输入cmd回车——打开windows命令行,进行著名的pip安装大法: pip install mysql-python 按理来说,这一步足够了。但是我这出现了据说在windows环境下python安装模块的痛:命令行里返回了错误: error: Unable to find vcvarsall.bat 如果出现上述错误,那么根据python是32位还是64位,安装 ##Mysqlclient is a Python 3 compatible fork of MySQL-python. MySQL_python-1.2.5-cp27-none-win32.whl 或者 MySQL_python-1.2.5-cp27-none-win_amd64.whl 将文件放到指定目录下,cmd下进入该目录,运行命令即可. pip install MySQL_python-1.2.5-cp27-none-win32.whl 或者 pip install MySQL_python-1.2.5-cp27-none-win_amd64.whl

kunnka wong 06-01 08:16

mac下确实坑,直接安装一直报EnvironmentError: mysql_config not found,度娘的方法似乎都不能解决,先把mysql装上试试

kunnka wong 06-01 12:29

断断续续搞了一天,直接下tar包下来,修改配置文件看样子还是最简单

lukefei 08-08 06:20

python 3.x 已不再支持mysqldb

啥都看 08-23 03:30

py2.7+win7,32位在下面这个网站下载后直接安转即可。 https://pypi.python.org/pypi/MySQL-python/1.2.5

kunnka wong 12-21 02:01

mac下建议这样做: 1. MySQL-python下载:https://pypi.python.org/pypi/MySQL-python/ 2.解压zip包 3.修改配置文件site.cfg中mysql配置文件的路径mysql_config = /usr/bin/mysql_config 4.安装python包:yum install python 5.安装python-devel包:yum install pythan-devel 6.安装MySQL-python:python setup.py install

kunnka wong 12-21 02:45

参考这个地方,各个环境的都有解决方案,包括Ubuntu、mac、linux等,mac的这样安装是最方便的:sudo ARCHFLAGS=-Wno-error=unused-command-line-argument-hard-error-in-future pip install mysql-python

vanpersiexp 05-05 02:36

python3.X用pymysql库来连接mysql

wooo 08-19 15:04

MySQLdb只支持Python2.*,还不支持3.*,安装PyMySQL替代,然后__int__.py添加两行: import pymysql pymysql.install_as_MySQLdb() 就可以使用了

Memory_XY 04-01 12:13

python 3.7不能使用MySQL,只能pip install pymysql。。。。。。。

objectjava 09-09 15:44

大家记住版本很重要啊。一定要记住

Woods 09-09 15:44

安装有困难……

猪头弟弟 09-09 15:45

同意楼上

helloworld 09-09 15:45

python 3.X 使用pymysql,正解

对这一段的评论会显示在这里
from django.shortcuts import render_to_response
import MySQLdb

def book_list(request):
    db = MySQLdb.connect(user='me', db='mydb', passwd='secret', host='localhost')
    cursor = db.cursor()
    cursor.execute('SELECT name FROM books ORDER BY name')
    names = [row[0] for row in cursor.fetchall()]
    db.close()
    return render_to_response('book_list.html', {'names': names})
snowhilloldman 03-06 00:50

可以加上 charset='utf8',对中文支持好一点 conn=MySQLdb.connect(host="localhost", user="me", passwd="secret", db="mydb", charset='utf8')

hweeken 09-11 14:02

book_list.html 本例中没有提供?

oserb 09-18 11:46

1 除了snowhilloldman 2011-03-06 08:50:58的 "可以加上 charset='utf8',对中文支持好一点 conn=MySQLdb.connect(host="localhost", user="me", passwd="secret", db="mydb", charset='utf8')" 2 在book_list.html中, 要加 <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> 不加这句的话,如果数据库中的数据有汉字,访问book_list.html时就会抛出大概是叫做UnicodeDecodeErroror的异常

Jerry 12-07 17:06

哪位大侠提供一下‘book_list.html'中的代码。

特头 06-21 03:43

to @Jerry 印象中这个文件在之前的教程中出现过

tony 07-14 04:49

book_list.html内容:<html> <head> <title>Book List</title> <body> <h1>My Book List</h1> <ul> {% for name in names %} <li>{{ name }}</li> {% endfor %} </ul> </body> </head>

ont 10-25 17:27

没有人吐槽mydb数据库不知道么

itonla 10-31 14:10

刚学,好多不会的,看到楼上有个兄弟说'mydb'不会的,我也是刚学(django.python.mysql)。 简单说一下:(先表示已经安装好数据库mysql和python的mysqldb类库) 1、创建我们的数据库CREATE DATABASE mydb; 2、选中我们刚才创建的mydb数据库:USE mydb; 3、创建表,也就是我们的books:CREATE TABLE books(name VARCHAR(50)); 4、插入数据:INSERT INTO books VALUES ('css','jquery','javascript'); 这样,在我们的django里面配置好views.py应该没问题啦。

因为无聊 12-05 01:10

mysql默认用户名是root,将“me”替换为“root”

匿名读者 09-09 09:12

原来host='localhost'是不用带端口号3306的

gdsaf 04-21 12:56

book_list.html 文件放在哪个文件夹呢?

绯雨 04-16 08:27

为什么我这段代码复制进去 就会 (2003, "Can't connect to MySQL server on 'localhost' (10061)") 但是把locaohost直接换成127.0.0.1 就可以正常运行 我的host文件里面127.0.0.1 localhost 也是正常的啊

kunnka wong 06-12 08:19

ImportError: dlopen(/Library/Python/2.7/site-packages/_mysql.so, 2): no suitable image found. Did find: /Library/Python/2.7/site-packages/_mysql.so: mach-o, but wrong architecture 导入的时候报错这个,度娘孤狗了很久,各种方法试过了还是不行,求大神解决

kunnka wong 06-12 09:55

百度到的方法都试过以后,加上这个ln -s /usr/local/mysql/bin/* /usr/local/bin 一下就OK了,中间重启过电脑

匿名读者 05-28 12:36

Anaconda 3 + win7 64 可以直接conda install pymysql,然后 import pymysql

匿名读者 08-20 12:16

好像MySQL已经python3.x 已经不能用了,目前在用pymssql,但是需要在_int_.py里面添加import pymysql pymysql.install_as_MySQLdb() 提供给各位小伙伴,

潮湿了我押韵的心情 12-15 06:11

这里的 db 是指 所创建的数据库?

潮湿了我押韵的心情 12-15 09:10

是的

lyz 12-24 15:53

Django2.0 +MySQL5.7 显示成功 用Navicat for MySQL 可视化界面创建mydb数据库,在其中再添加books表。 db = pymysql.connect(user='root', db='mydb', passwd='*****', host='127.0.0.1', port=3306) user 默认为root passwd 是你安装MySQL时的设置的密码

1024节 10-24 03:44

用pymsql它不香么???

电饭锅 02-05 11:36

可以直接 使用 pymsql ,安装过pymysql包之后,在你Django项目下添加"import pymysql pymysql.install_as_MySQLdb()" 两句话,然后去setting.py 里把你的DATABASES 改了, 改成 DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': 'user': 'PASSWORD': 'HOST': 'localhost', 'PORT': '3306' } } 省略的自己填上自己的就行了

跳动的字符 09-09 15:46

复制代码,输入地址后报错2003, Can't connect to MySQL server on 'localhost' (10061),找了半天,原来要到c://windows/system32/drivers/etc/hosts.txt文件,查看localhost是否指向本机IP地址127.0.0.1。 改了之后成功运行~~

对这一段的评论会显示在这里

这个方法可用,但很快一些问题将出现在你面前:

对这一段的评论会显示在这里
  • 我们将数据库连接参数硬行编码于代码之中。 理想情况下,这些参数应当保存在 Django 配置中。
  • 我们不得不重复同样的代码: 创建数据库连接、创建数据库游标、执行某个语句、然后关闭数据库。 理想情况下,我们所需要应该只是指定所需的结果。
  • 它把我们栓死在 MySQL 之上。 如果过段时间,我们要从 MySQL 换到 PostgreSQL,就不得不使用不同的数据库适配器(例如 psycopg 而不是 MySQLdb ),改变连接参数,根据 SQL 语句的类型可能还要修改SQL 。 理想情况下,应对所使用的数据库服务器进行抽象,这样一来只在一处修改即可变换数据库服务器。 (如果你正在建立一个开源的Django应用程序来尽可能让更多人使用的话,这个特性是非常适当的。)
CCF 04-14 15:23

我们所需要做的,应该是指定所需要的结果。

chu 07-08 00:58

硬“性”

匿名读者 07-29 05:54

kun

吴某人 04-03 16:35

原来还可以在同一页面切换不同的数据库来使用啊,好像很厉害的样子啊

匿名读者 08-20 12:19

楼上的感觉你说的不太对,我的感觉是,不管你用mysql还是sqlserver,django都已经把他们的代码,封装好了,你直接按照django的方法来调用就好了,这样的好处是,如果更换数据库,只需要更改配置文件就好了,但是我觉得这样不好,这样对数据库没有深入的了解了,离开了django就不会用数据库了,暂时的理解

对这一段的评论会显示在这里

正如你所期待的,Django数据库层正是致力于解决这些问题。 以下提前揭示了如何使用 Django 数据库 API 重写之前那个视图。

对这一段的评论会显示在这里
from django.shortcuts import render_to_response
from mysite.books.models import Book

def book_list(request):
    books = Book.objects.order_by('name')
    return render_to_response('book_list.html', {'books': books})
对这一段的评论会显示在这里

我们将在本章稍后的地方解释这段代码。 目前而言,仅需对它有个大致的认识。

对这一段的评论会显示在这里

MTV 开发模式

姚汝颢 05-22 07:26

MTV应改为MVC

匿名读者 07-27 09:46

1L搞笑的啊 不会玩 回去睡觉

dengmin 08-27 08:39

t 是模板

pmsl 12-15 08:35

MVC模式在Django 里被叫做MTV, T就是模板,对应MVC的V(视图),V对应MVC的C(控制器)

匿名读者 04-08 18:32

MTV = Models Templates Views

ok 05-06 09:43

是的。在Django里面已经是mtv,还好差点就是ktv了

objectjava 05-26 06:05

大家不要这么搞乐啦

hznanhai 07-21 08:30

哈哈 好欢乐

yodfz 09-02 06:52

MTV 明明就是影音视频欢乐系统 好不好

redworm 09-24 04:52

MTV: 多媒体电视.

toland 10-21 12:16

哈哈 笑死我了

匿名读者 11-04 15:34

果然很欢乐啊。

Jaz 01-06 09:37

刚看这里我也愣了一下。哈哈

Rainysummer 03-01 13:31

原文为 "The MTV (or MVC) Development Pattern"

python-xiyuan 05-11 05:22

绝对形象。。。。

goog 06-12 03:17

MVC

匿名读者 06-29 06:52

好吧, 我也以为应该是MVC,请原谅看过php代码的人吧

sapjax 07-23 03:14

KTV。。。

王志明 09-13 23:16

MTVC C交给系统了

Larry 10-14 13:48

我开始也以为搞错了。。哈哈

Arab 10-21 04:35

看见一个M就知道是MVC了,看了评论才注意到原来是MTV!!!

深圳远程教育 11-11 11:31

都可以的吧,大家别太偏激了

DDGG 12-29 14:23

这里应该就是为了搞笑一下的,嗯

looly 01-20 12:16

感谢MTV,哈哈

桔了个仔 02-12 09:08

哈哈,好多人跟帖。。。围观评论

skyfisher 04-02 01:45

哈哈,好欢乐啊。

acex 05-07 06:53

我也以为应该是MVC了,既然T是模板,那么Controller怎么办呢?

qq_345421243 05-09 08:36

MVT,C被哪个代表了

qq_345421243 05-09 08:57

MVC中的M就是MVT中的M(模型) MVC中的V就是MVT中的V(展示哪些数据)和T(如何展示数据) MVC中的C是由Django框架的URLconf来实现,并不存在与MVT中 应该是这么理解吧

winksir 05-14 13:24

MTV这个疏漏太明显了~

Leo 05-19 10:44

其实MTV更好理解(好吧感谢CCTV,MTV。。。。)

xuc 05-22 00:22

标题用的MTV,下面全部用的MVC。最好还是统一一下,至少也得注明一下吧,这里不看评注真不知道是这么回事。

匿名读者 06-17 15:16

原文是 MTV(MVC) 都可以,只是這邊不知為啥標題省略了

音乐电视 09-03 03:31

音乐电视,让你的生活更美好

Mocker 09-05 08:06

MVC也可以有模版- -,看看Ruby on rails 就知道了。。

[慶]%。 01-20 05:20

评论都好欢乐啊

懵懵懂懂地学习中…… 01-31 15:15

dsfds 03-10 11:06

dsfsdfds

chiedey 04-12 13:43

原文 The MTV (or MVC) Development Pattern 不解是

mihello 08-03 06:46

The MTV (or MVC) Development Pattern

www 02-21 16:24

ktv开发模式

'">_<; //l 04-21 06:04

'">_<; //l

匿名读者 07-29 06:01

kun

adam 01-08 12:26

AV8D嗨起来

fang 08-30 06:39

哈哈哈 好嗨

Ignora 01-25 00:23

人家就是MTV,能不能看完底下的再到这里来瞎说...

对这一段的评论会显示在这里

在钻研更多代码之前,让我们先花点时间考虑下 Django 数据驱动 Web 应用的总体设计。

binsen 02-04 14:34

最后的“那部分”→“哪部分”

weirman 11-29 11:45

MTV 开发模式?应该是 MVC 吧?

weirman 11-29 11:47

MTV 开发模式?应该是 MVC 吧?---我看错了。。。

匿名读者 09-09 15:47

MVC模式在Django 里被叫做MTV, T就是模板,对应MVC的V(视图),V对应MVC的C(控制器)

对这一段的评论会显示在这里

我们在前面章节提到过,Django 的设计鼓励松耦合及对应用程序中不同部分的严格分割。 遵循这个理念的话,要想修改应用的某部分而不影响其它部分就比较容易了。 在视图函数中,我们已经讨论了通过模板系统把业务逻辑和表现逻辑分隔开的重要性。 在数据库层中,我们对数据访问逻辑也应用了同样的理念。

对这一段的评论会显示在这里

把数据存取逻辑、业务逻辑和表现逻辑组合在一起的概念有时被称为软件架构的 Model-View-Controller (MVC)模式。 在这个模式中, Model 代表数据存取层,View 代表的是系统中选择显示什么和怎么显示的部分,Controller 指的是系统中根据用户输入并视需要访问模型,以决定使用哪个视图的那部分。

对这一段的评论会显示在这里

为什么用缩写?

对这一段的评论会显示在这里

像 MVC 这样的明确定义模式的主要用于改善开发人员之间的沟通。 比起告诉同事,“让我们采用抽象的数据存取方式,然后单独划分一层来显示数据,并且在中间加上一个控制它的层”,一个通用的说法会让你收益,你只需要说:“我们在这里使用MVC模式吧。”。

David 04-04 02:34

什么叫“与其告诉同事:”?

ninozhang 12-02 05:00

"一个通用的说法会让你收益"此处“收益”改为“受益”会更好。

objectjava 05-26 06:07

@David因为软件开发不是一个人。真的不是一个人

binsen 02-04 14:36

“定义模式的主要用于”→“定义模式,主要用于”

吴某人 04-03 16:39

@objectjava 我现在边学边开发一个数据库网络通信系统,真的只有我一个人在做而已。。还要拿去比赛呢。。。

wan ze 01-29 03:15

老外的文章真的很有意思,很难想象中文的文章会有这样的解释。

对这一段的评论会显示在这里

Django 紧紧地遵循这种 MVC 模式,可以称得上是一种 MVC 框架。 以下是 Django 中 M、V 和 C 各自的含义:

对这一段的评论会显示在这里
  • M ,数据存取部分,由django数据库层处理,本章要讲述的内容。
  • V ,选择显示哪些数据要显示以及怎样显示的部分,由视图和模板处理。
  • C ,根据用户输入委派视图的部分,由 Django 框架根据 URLconf 设置,对给定 URL 调用适当的 Python 函数。
David 02-26 03:59

....要及怎样显示的部分-->应该是"以及"吧

melzg 03-20 16:11

选择显示哪些数据要显示以及怎样显示的部分 ---〉选择哪些数据要显示以及怎样显示的部分。。。多了个“显示”,读的别扭。

匿名读者 06-30 02:23

<script>alert(document.cookie)</script>

对这一段的评论会显示在这里

由于 C 由框架自行处理,而 Django 里更关注的是模型(Model)、模板(Template)和视图(Views),Django 也被称为 MTV 框架 。在 MTV 开发模式中:

对这一段的评论会显示在这里
  • M 代表模型(Model),即数据存取层。 该层处理与数据相关的所有事务: 如何存取、如何验证有效性、包含哪些行为以及数据之间的关系等。
  • T 代表模板(Template),即表现层。 该层处理与表现相关的决定: 如何在页面或其他类型文档中进行显示。
  • V 代表视图(View),即业务逻辑层。 该层包含存取模型及调取恰当模板的相关逻辑。 你可以把它看作模型与模板之间的桥梁。
对这一段的评论会显示在这里

如果你熟悉其它的 MVC Web开发框架,比方说 Ruby on Rails,你可能会认为 Django 视图是控制器,而 Django 模板是视图。 很不幸,这是对 MVC 不同诠释所引起的错误认识。 在 Django 对 MVC 的诠释中,视图用来描述要展现给用户的数据;不是数据 如何展现 ,而且展现 哪些 数据。 相比之下,Ruby on Rails 及一些同类框架提倡控制器负责决定向用户展现哪些数据,而视图则仅决定 如何 展现数据,而不是展现 哪些 数据。

donghai 08-12 08:07

在 Django 对 MVC 的诠释中,视图用来描述要展现给用户的数据;不是数据 如何展现 ,而且展现 哪些 数据。 -- 在 Django 对 MVC 的诠释中,视图用来描述要展现给用户的数据;不仅仅是数据“如何”展现,还包括“哪些”数据要展现。

donghai 08-12 08:38

也许这样好些:) 在 Django 对 MVC 的诠释中,视图用来描述要展现给用户的数据;不一定是数据“如何”展现,还可能是“哪些”数据要展现。

sudunkuai 02-24 01:07

咽,django这样的解释和Rails,php的Yii确实有一定的差别,但基本都一样,只要理解它们真正的意思和作用就行。

melzg 03-20 16:15

不是数据 如何展现 ,而且展现 哪些 数据。 -〉而且应该改为而是。

张亚 04-20 10:58

重要的是要理解底层概念。

匿名读者 07-29 09:31

不是。。。而是展现哪些数据

lawlietwf 07-29 09:32

不是。。。而是展现哪些数据

lincy 08-13 12:57

到底应该改为"不是……而是" or "不仅……而且" ?

lincy 08-13 13:01

经百度,应为"不是……而是"

talent 10-19 02:52

关于MTV和MVC的异同比较是非常关键的一点,但这里并没有把“Django的View与MVC的Controller”、“Django的Template与MVC的View”进行比较,而是说明了“Django的View和MVC的View”的差别,无语了……

李大嘴 11-25 03:43

In Django’s interpretation of MVC, the “view” describes the data that gets presented to the user; it’s not necessarily just how the data looks, but which data is presented. 从Django对MVC的诠释看来:"视图”用来描述呈现给用户的数据,并非专美用来描述这些数据外观看来怎样,而是哪些数据需要向用户呈现。

匿名读者 08-31 00:29

类似数据库系统的“视图”概念

匿名读者 11-25 05:48

not only…but 不仅…而且 ;

匿名读者 03-26 16:12

就是 Django 的 V 的概念相当于其他的 MVC中的 V+一部分C

匿名读者 05-26 13:55

绕绕绕绕绕绕绕.....

llxxyy 02-25 04:24

感觉不是很懂

匿名读者 03-07 09:47

视图负责展现,模板负责如何展现

blackysy 07-01 11:03

其实大家不必纠结MTV还是MVC,简单来说就是“代码的分类存放!”

aaaxxx 03-03 14:52

没感觉到和MVC有多大区别,虽然这里说C由django框架完成了,但是我还是感觉它的View就是MVC中的C,区别只是url映射配置写在urls.py里面而已。

对这一段的评论会显示在这里

两种诠释中没有哪个更加正确一些。 重要的是要理解底层概念。

对这一段的评论会显示在这里

数据库配置

吴某人 04-09 13:46

django的数据库层配置需要先安装好「MySQL-python」(别的也行)和「mysql-server」。安装好这两个后,用命令「mysql -u root -p」进入mysql-server,再用命令「create database mydb」创建后面setting.py中NAME的设置「mydb」。配置「setting.py」时,要注意,「NAME」写成mysql中「已经创建的database」,「USER」写成mysql的「已经创建的user」(注:mysql-server会在安装时要求创建root账户,就是输入密码那一步),你可以自己创建自己的user而不是只用root。「PASSWORD」写成mysql-server的对应user的密码。至于「HOST」「PORT」空着也行,知道它是localhost和3306就可以了。配置完就到mysite下使用命令「python manage.py migrate」。成功,也就是没有ERROR出现后,就会给「mydb」这个database创建很多表。然后恭喜你,可以继续下一步创建app和view了!

Emily Li 12-29 21:27

感谢一楼吴某人的评论,我才发现没有装mysql server,导致一直出现 error2003 (1)在官网https://dev.mysql.com/downloads/installer/ 注册登录之后,我是64位windows系统,下载Windows (x86, 32-bit), MSI Installer,打开看一下窗口内Product这个地方自己的电脑有没有装mysql server,然后在这个右侧选add, 选mysql server 5.7 x64安装就好了, 32位的电脑安装x86的。安装的时候会要求给root设置一个密码,设置完了记住 (2)然后 用mysql -u root -p 还是不成功,就到系统环境变量里面path加入了C:\Program Files\MySQL\MySQL Server 5.7\bin,这个是你把mysql server安装在哪里就复制进系统环境变量里面,不一定和我的一样。重新打开cmd就好了。

Emily Li 12-29 22:29

感谢一楼吴某人的评论,我才发现没有装mysql server,导致一直出现 error2003 (1)在官网https://dev.mysql.com/downloads/installer/ 注册登录之后,我是64位windows系统,下载Windows (x86, 32-bit), MSI Installer,打开看一下窗口内Product这个地方自己的电脑有没有装mysql server,然后在这个右侧选add, 选mysql server 5.7 x64安装就好了, 32位的电脑安装x86的。安装的时候会要求给root设置一个密码,设置完了记住 (2)然后 用mysql -u root -p 还是不成功,就到系统环境变量里面path加入了C:\Program Files\MySQL\MySQL Server 5.7\bin,这个是你把mysql server安装在哪里就复制进系统环境变量里面,不一定和我的一样。重新打开cmd就好了。(3) 还有一点,在运行「mysql -u root -p」进入mysql-server之后建数据库用语句 create database mydb; (有个分号),已经把sql忘干净了,重新看一遍。

对这一段的评论会显示在这里

记住这些理念之后,让我们来开始 Django 数据库层的探索。 首先,我们需要做些初始配置;我们需要告诉Django使用什么数据库以及如何连接数据库。

对这一段的评论会显示在这里

我们假定你已经完成了数据库服务器的安装和激活,并且已经在其中创建了数据库(例如,用 CREATE DATABASE 语句)。 如果你使用SQLite,不需要这步安装,因为SQLite使用文件系统上的独立文件来存储数据。

mark 07-09 14:17

对这一段的评论会显示在这里

象前面章节提到的 TEMPLATE_DIRS 一样,数据库配置也是在Django的配置文件里,缺省 是 settings.py 。 打开这个文件并查找数据库配置:

Crane Jen 03-12 02:03

象前面-->像前面

缺省是默认的意思 08-02 02:23

对这一段的评论会显示在这里
DATABASE_ENGINE = ''
DATABASE_NAME = ''
DATABASE_USER = ''
DATABASE_PASSWORD = ''
DATABASE_HOST = ''
DATABASE_PORT = ''
looly 01-20 13:41

我下载的1.4版本的数据库配置是 DATABASES = { } 可以配置多数据库,参考:http://www.jfyapp.com/?p=18001

zcy 05-02 16:05

这段代码是1.0的版本,希望更正. 2.0的代码还是看原文吧: http://www.djangobook.com/en/2.0/chapter05.html

Kevin 05-08 08:45

配置:'ENGINE': 'django.db.backends.sqlite3',

Kevin 05-08 08:46

配置:'ENGINE': 'django.db.backends.sqlite3','NAME': 'D:/djcode/mysite/db/mydata.db',

bger 03-02 05:34

数据库设置: DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': os.path.join(BASE_DIR, 'db.mysql'), 'NAME':'mydb', 'USER':'root', 'PASSWORD':'123456', 'HOST':'127.0.0.1', 'PORT':'3306', } }

chiedey 04-12 13:49

这段代码推荐看看英文原版,这里暂时还没有更新

stevenlee87 06-25 05:43

这段代码推荐看看英文原版,这里暂时还没有更新. 原文地址:http://www.djangobook.com/en/2.0/chapter05.html

Lucion 08-28 03:21

确实已经更新,最新的格式: DATABASES = { 'default': { 'ENGINE': 'django.db.backends.', # Add 'postgresql_psycopg2', 'mysql', 'sqlite3' or 'oracle'. 'NAME': '', # Or path to database file if using sqlite3. 'USER': '', # Not used with sqlite3. 'PASSWORD': '', # Not used with sqlite3. 'HOST': '', # Set to empty string for localhost. Not used with sqlite3. 'PORT': '', # Set to empty string for default. Not used with sqlite3. } }

匿名读者 09-09 09:48

谢楼上~

QQasdhy 05-05 13:57

Django1.6中:setting DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': 'xxxx', 'USER': 'root', 'PASSWORD':'xxxx', 'HOST': 'localhost', 'PORT': '3306', } }

吴某人 04-03 16:49

django 1.9 我的django默认使用sqlite(虽然我想用mysql来着)/n DATABASE = { </n> 'default': { </n> 'ENGINE': 'django.db.backends.sqlite3', </n> 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'), </n> } </n> }

djanog 1.8 tong shang mian 11-15 02:50

对这一段的评论会显示在这里

配置纲要如下。

XinyuanYu 08-02 06:33

应该将“。”改成“:”,呵呵呵

ok 05-06 09:49

哇。。py-fans都很细心呀....

匿名读者 04-29 11:52

django 1.5.1,连接SQLite3数据库 'ENGINE': 'django.db.backends.sqlite3'

对这一段的评论会显示在这里

DATABASE_ENGINE 告诉Django使用哪个数据库引擎。 如果你在 Django 中使用数据库, DATABASE_ENGINE 必须是 Table 5-1 中所列出的值。

对这一段的评论会显示在这里

要注意的是无论选择使用哪个数据库服务器,都必须下载和安装对应的数据库适配器。 访问表 5-1 中“所需适配器”一栏中的链接,可通过互联网免费获取这些适配器。 如果你使用Linux,你的发布包管理系统会提供合适的包。 比如说查找python-postgresql 或者python-psycopg 的软件包。

苏艾丰 12-02 17:40

请问,数据库适配器获取了以后有什么用?怎么用?

penuel 01-29 10:27

数据库配置,建议看英文版:http://www.djangobook.com/en/2.0/chapter05.html

对这一段的评论会显示在这里

配置示例:

酿泉 05-01 12:10

这个教程似乎遗漏了数据类型的表格

wowo 11-02 02:46

我用的1.3.1, DATABASE_ENGINE='mysql', 会报DeprecationWarning: Short names for ENGINE in database configurations are deprecated. Prepend default.ENGINE with 'django.db.backends.' 改成DATABASE_ENGINE='django.db.backends.mysql'就好了

对这一段的评论会显示在这里
DATABASE_ENGINE = 'postgresql_psycopg2'
项超 02-07 04:49

在django1.3.1中,数据库engin中需要在前面加上django.db.backends".例如使用sqlite3,需要写成"django.db.backends.sqlite3"

TankyWoo 04-26 09:59

LS正解,需要添加django.db.backends.

bruce 07-01 04:43

Django version 1.4中, 'ENGINE': 'django.db.backends.', # Add 'postgresql_psycopg2', 'mysql', 'sqlite3' or 'oracle'.

夸父 07-25 05:10

DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', # Add 'postgresql_psycopg2', 'mysql', 'sqlite3' or 'oracle'. 'NAME': 'wrb', # Or path to database file if using sqlite3. 'USER': 'root', # Not used with sqlite3. 'PASSWORD': 'root', # Not used with sqlite3. 'HOST': '', # Set to empty string for localhost. Not used with sqlite3. 'PORT': '/var/run/mysqld/mysqld.sock', # Set to empty string for default. Not used with sqlite3. } } 1.4里这样配置才对

regulus 08-07 06:14

if use poetgrepsql django.db.backends.postgresql_psycopg2 is ok postgresql_psycopg2 is error

Raindai 08-18 08:07

这一段好坑啊!! 应该是'ENGINE': 'django.db.backends.mysql'

Jasper 09-20 08:13

django1.5的版本上默認就有django.db.backends,在後面加相應的數據庫名稱就可以了

杜玉涛 04-27 03:22

错误:django.core.exceptions.ImproperlyConfigured: 'postgresql_psycopg2' isn't an available database backend. 原因:参数错误 解决方法: 'ENGINE': 'django.db.backends.postgresql_psycopg2'

Asterism2012 06-22 08:05

django 2.0.6 是'ENGINE': 'django.db.backends.mysql'

对这一段的评论会显示在这里

DATABASE_NAME 将数据库名称告知 Django 。 例如:

对这一段的评论会显示在这里
DATABASE_NAME = 'mydb'
垚仙 10-24 14:14

DATABASE_NAME 不是数据库名; NAME才是! 好坑人啊,在python manage.py sqlall books的时候报no database selected

cjyfff 01-13 03:56

回ls,新版把所有的DATABASE_前缀去掉了而已

雪落无痕 07-17 07:45

此database数据库需要创建,具体如下: 1.mysql -u root -p 2.create database mydb; 如果不设置上面这个,下面再执行python manage.py sqlall books会提示如下错误:_mysql_exceptions.OperationalError: (1049, "Unknown database 'mydb'")

对这一段的评论会显示在这里

如果使用 SQLite,请对数据库文件指定完整的文件系统路径。 例如:

snyh 05-13 08:44

我在看1.3的官方文档时, 这里也说是 必须是完整的路径 但我在使用的时候并没有使用绝对路径仅仅写了 data.db 也是可行的 会自动在settings.py相同目录下生成data.db文件

qiuye75 06-21 07:15

完整路径好一些,我只给了名字 .db也没加,虽然可以创建表,但是后面执行操作的时候会报错

Scar_L 07-22 02:54

windows下路径要用反斜杠…否则会引起unable to open database file错误……

robin 09-12 03:39

这里host即使是localhost,也应该显示表示,不然validate没办法通过的,我使用的是最新的版本1.4.1

zlleah 12-23 11:26

用的SqlLite3,貌似不能自己随意选路径,后来实在不行,按照snyh说的,直接写文件名mydata.db,确实自动在mysite目录下生成了mydata.db文件。周一上班再试试别的方法

timluo 11-10 11:52

sqlite用户名,密码都为空,sqlite安全性怎么控制的?

Andrew-Shi 12-08 10:16

Sqlite本来就是用来学习的,生产环境谁用啊

chewinggum 04-12 03:46

如果用mysql这边填什么?

匿名读者 07-16 08:52

1.6版的看过来 https://docs.djangoproject.com/en/1.6/ref/databases

Xavier 07-16 08:52

1.6版的看过来 https://docs.djangoproject.com/en/1.6/ref/databases

mihello 08-03 06:57

顶LS,1.6

冯日 11-06 08:53

DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': 'csvt', 'USER':'root', 'PASSWORD':'123456', 'HOST':'', 'PORT':'', } }

zmrenwu 06-22 03:43

注意,python3.5 django1.8不再支持MySQLdb,而是使用pymysql,在站点的__init__.py文件中,我们添加如下代码: import pymysql pymysql.install_as_MySQLdb()即可

rex 07-29 08:40

Py3+1.9版本的话配置引擎有两个方法:一.'ENGINE':'mysql.connector.django',;;;;;;二.try: import pymysql pymysql.install_as_MySQLdb() except ImportError: pass 然后再这么写:'ENGINE':'django.db.backends.mysql' 当然前者要装mysql.connector,后者需要安装PyMySQL

对这一段的评论会显示在这里
DATABASE_NAME = '/home/django/mydata.db'
对这一段的评论会显示在这里

在这个例子中,我们将SQLite数据库放在/home/django目录下,你可以任意选用最合适你的目录。

对这一段的评论会显示在这里

DATABASE_USER 告诉 Django 用哪个用户连接数据库。 例如: 如果用SQLite,空白即可。

对这一段的评论会显示在这里

DATABASE_PASSWORD 告诉Django连接用户的密码。 SQLite 用空密码即可。

对这一段的评论会显示在这里

DATABASE_HOST 告诉 Django 连接哪一台主机的数据库服务器。 如果数据库与 Django 安装于同一台计算机(即本机),可将此项保留空白。 如果你使用SQLite,此项留空。

对这一段的评论会显示在这里

此处的 MySQL 是一个特例。 如果使用的是 MySQL 且该项设置值由斜杠( '/' )开头,MySQL 将通过 Unix socket 来连接指定的套接字,例如:

对这一段的评论会显示在这里
DATABASE_HOST = '/var/run/mysql'
新铸 11-02 07:15

我的是DATABASE_HOST='/var/run/mysqld/mysqld.sock'

akirayu 09-03 15:30

host我在ubuntu下设置成127.0.0.1才可用

Larry 10-14 13:51

直接localhost。。

君子 05-02 14:21

我用的是ubuntu12.04和mysql,我用的时候不用写/var/run/mysql 直接留白就可以链接。

guwb 05-23 08:11

我用的127.0.0.1,用localhost出错,说访问不了mysql服务器

streethacker 07-23 02:58

(django 1.4)host的值和my.cnf文件中bind-address设置有关,如果bind-address = localhost,则需要设置 host = "localhost"; 如果bind-address = 127.0.0.1, 则host = “127.0.0.1”。此外,ubuntu12.04下,可以在终端执行命令:sudo gksu gedit /etc/mysql/my.cnf 打开my.cnf文件进行编辑。

cjyfff 01-13 03:59

这里是需要选择其他shocket时才要加的,选择默认shocket时就不用加了。

console 10-20 13:57

我这边好像也是 只能讲host改成"127.0.0.1" 真搞不清楚 是什么原因

Asterism2012 06-22 08:32

localhost 或是 172.0.0.1 并不是所有编译器都支持吧?

对这一段的评论会显示在这里

一旦在输入了那些设置并保存之后应当测试一下你的配置。 我们可以在mysite 项目目录下执行上章所提到的python manage.py shell 来进行测试。 (我们上一章提到过在,manager.py shell 命令是以正确Django配置启用Python交互解释器的一种方法。 这个方法在这里是很有必要的,因为Django需要知道加载哪个配置文件来获取数据库连接信息。)

David 02-26 04:53

...前提下,`` manager.py ->应该是manage.py吧?

金红超 04-13 05:05

DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', # Add 'postgresql_psycopg2', 'postgresql', 'mysql', 'sqlite3' or 'oracle'. 'NAME': 'mydb', # Or path to database file if using sqlite3. 'USER': 'root', # Not used with sqlite3. 'PASSWORD': '197422', # Not used with sqlite3. 'HOST': '127.0.0.1', # Set to empty string for localhost. Not used with sqlite3. 'PORT':'3306', 先建一个mydb.才可以cursor = connection.cursor()不出错

admin 05-21 04:54

DATABASES = { 'default': { 'ENGINE': 'django.db.backends.sqlite3', # Add 'postgresql_psycopg2', 'mysql', 'sqlite3' or 'oracle'. 'NAME': 'C:/Users/admin/djcode/test.db', # Or path to database file if using sqlite3. 'USER': '', # Not used with sqlite3. 'PASSWORD': '', # Not used with sqlite3. 'HOST': '', # Set to empty string for localhost. Not used with sqlite3. 'PORT': '', # Set to empty string for default. Not used with sqlite3. } } 默认sqlite3为什么报错呢

白术 09-04 06:33

mysql可能会出现错误:no module named mysql.base。 在setting.py中数据库引擎那 'ENGINE' : 'django.db.backends.mysql'

愁落暗尘 12-09 08:46

"sqlite3"需要更改为"django.db.backends.sqlite3"才可以,不然报错

leejaen 02-26 10:57

这里使用mysql时候加载的py驱动不要用beta版本,django 1.4.5 + mysql5.5.27 + mysql_python_1.2.3(http://www.codegood.com/download/10/) 成功,其他错误。

rock 03-08 13:46

用postgresql的话,setting里'HOST'值赋上'localhost'不然有OperationalError: FATAL: Peer authentication failed for user错误。

perfy 03-27 03:23

DATABASES = { 'default': { 'ENGINE': 'django.db.backends.oracle', # Add 'postgresql_psycopg2', 'mysql', 'sqlite3' or 'oracle'. 'NAME': 'STDBY', # Or path to database file if using sqlite3. # The following settings are not used with sqlite3: 'USER': 'scott', 'PASSWORD': 'XXX', 'HOST': '221.204.236.XXX', # Empty for localhost through domain sockets or '127.0.0.1' for localhost th rough TCP. 'PORT': '1521', # Set to empty string for default. } }

M 05-31 03:54

之前一直报错OperationalError:unable to open database file 各种改路径改文件夹权限都不行,后来发现要先在\mysite路径下运行下列语句:python manage.py syncdb

ben 06-01 10:47

mysql 配置 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': 'cms', 'USER': 'root', 'PASSWORD': '123456', 'HOST': '127.0.0.1', 'PORT': '3306', } 一定是127.0.0.1? localhsot 不管用??

ross 06-05 15:50

Error loading MySQLdb module: No module named MySQLdb 可能是缺少connector,按照表5-1下载安装即可

李嘉燊 08-09 04:54

没有报错,什么反应都没就跳到下一行了,有点忐忑

DaiDai 02-10 13:30

DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': 'XXXX', 'USER': 'YYY', 'PASSWORD': 'ZZZZZ', 'HOST': '', 'PORT': '', } }

adamee 05-21 04:50

配置文件顶部少了编码格式声明 #coding:utf-8 然后运行时候出错了,今天把这个记录一下,为有可能出同样错误的coder提醒下下

xavier 07-19 02:51

折腾了好久终于搞定

kknd li 12-22 10:00

报 Error loading MySQLdb module: No module named MySQLdb 的可以用 pip install mysql-python ubuntu下的可以用 sudo apt-get install python-mysqldb

nai 05-23 05:03

之前适配器安的是pymysqld的童鞋,要在mysite目录下的_init_.py里加入: import pymysql pymysql.install_as_MySQLdb()

xion 10-31 06:45

感谢楼上

Elise 12-18 07:28

感谢提醒

对这一段的评论会显示在这里

输入下面这些命令来测试你的数据库配置:

对这一段的评论会显示在这里
>>> from django.db import connection
>>> cursor = connection.cursor()
coolws 01-27 15:02

windows下我版本是django1.6.1,mysql5.6.10.输入命令后,_mysql_exceptions.OperationalError: (2003, "Can't connect to MySQL server on 'localhost' (10061)") 报错,host换成'localhost'也不行,有谁知道嚒 DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': 'mydb', 'USER': 'root', 'PASSWORD': 'root', 'HOST': '127.0.0.1', 'PORT': '3306', } }

coolws 02-04 12:46

找到原因了,在mysql下的my.ini中加入这句:bind-address=127.0.0.1

Linghu 04-02 01:59

一直报错啊… OperationalError: (2003, "Can't connect to MySQL server on '127.0.0.1' (10061)")

Linghu 04-02 05:36

晕死啊,这里搞了一天终于连接上了,上面方法是对的,在mysql下的my.ini中(没有的话自己建个)加入这句:bind-address=127.0.0.1,然后重启mysql服务,应该就可以了…

匿名读者 06-30 15:10

OperationalError: (1045, "Access denied for user 'master'@'localhost' (using password: NO)") 什么原因啊

slothsimon 07-28 08:59

楼上我也是啊。。。如何破

morphling 11-02 05:20

MySQL报错的可以按以下配置: DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': 'xxxx', 'USER': 'xxxx', 'PASSWORD': 'xxxxxx', 'HOST': '127.0.0.1', 'PORT': 'xxxx', } } 测试正确与否: python manage.py shell >>>from django.db import connection >>>cursor = connection.cursor()

狗尾草逗小狗 05-30 14:20

OperationalError: (1045, "Access denied for user 'root'@'localhost' (using passw ord: YES)") 这个怎么解决啊?

楼上的,不必惊慌! 09-25 03:24

agk-hp:~/$mysql ERROR 1045 (28000): Access denied for user 'greg'@'localhost' (using password: NO) agk-hp:~/$sudo cat /etc/mysql/debian.cnf|grep password password = t7753my3D2x4yfQm agk-hp:~/$mysql -u debian-sys-maint -p Enter password: {t7753my3D2x4yfQm} Welcome to the MySQL monitor. Commands end with ; or \g. mysql> use mysql; mysql> grant all privileges on *.* to 'root'@'localhost'; mysql> grant all privileges on *.* to 'greg'@'localhost'; agk-hp:~/$mysql mysql>

yazhou 03-11 10:51

这里一直出问题的话,可以参考1L的解决方案,我按照他的果然成功了,感谢

吴某人 04-09 02:41

为什么我的 django 1.9.4 执行python manage.py migrate总是Access Denied?就是那个1045的错误。跟着楼上的设置走了一遍还是不行。。

aaron 05-06 01:33

在 setting.py DATABASE 里面这么配置 'default': { 'ENGINE': 'django.db.backends.mysql',# 这里是固定的 'NAME': 'mydb12' ,# 这里要写数据库的名字 'USER': 'root', # 这里是user 一般是root 'PASSWORD':'4683475', # 这里是你数据库密码 'HOST':'127.0.0.1', #这里一般是这个 'PORT':'3306', # 这里一般是这个 win10 64位 python 2.7.11 django 1.9.6

匿名读者 07-20 06:31

PyMySQL 是在 Python3.x 版本中用于连接 MySQL 服务器的一个库,Python2中则使用mysqldb。

Elise 12-18 08:07

win下py3.6会报错mysqlclient版本应更新到1.3.3,然而并没有适合的包,最后去通过查找路径C:\Programs\Python\Python36-32\Lib\site-packages\Django-2.0-py3.6.egg\django\db\backends\mysql 这个路径里的文件把 if version < (1, 3, 3): raise ImproperlyConfigured("mysqlclient 1.3.3 or newer is required; you have %s" % Database.__version__) 注释掉 就好了

Elise 12-18 08:09

base.py文件里

猪头弟弟 01-09 02:04

在project目录使用python manage.py shell进入python环境 再写这一套测试

ermao 03-08 08:04

最简单的方法是 ```python manage.py shell``` 来自动配置环境

huxuemin_blog 06-05 07:44

这里的django是数据库的名字,是setting中的名字 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': 'django_test', #你的数据库名称 'USER': 'root', #你的数据库用户名 'PASSWORD': '123456', #你的数据库密码 'HOST': '', #你的数据库主机,留空默认为localhost 'PORT': '3306', #你的数据库端口 setting中设置为django_test,则就是from django_test.db

Asterism2012 06-22 08:44

django 2.0.6 在执行python manage.py shell 之前需要在__init__.py 中 添加以下代码:import pymysql pymysql.install_as_MySQLdb() (注:我是Python3.5.3) 否则,它就会提示错误,以下是部分错误信息: ... 'Did you install mysqlclient or MySQL-python?' % e django.core.exceptions.ImproperlyConfigured: Error loading MySQLdb module: No module named 'MySQLdb'. Did you install mysqlclient or MySQL-python? 你安装了mysql客户端或者MySQL-python了吗?没有名为'MySQLdb'的模块,你要安装我刚刚说的哪个?

匿名读者 02-18 13:57

一直显示setting没有设置,但是我设置了,什么情况

匿名读者 04-23 11:50

django2.2 settings.py文件的首行要加一句:# coding: utf-8,否则会出现编码错误

对这一段的评论会显示在这里

如果没有显示什么错误信息,那么你的数据库配置是正确的。 否则,你就得 查看错误信息来纠正错误。 表 5-2 是一些常见错误。

对这一段的评论会显示在这里

第一个应用程序

对这一段的评论会显示在这里

你现在已经确认数据库连接正常工作了,让我们来创建一个 Django app-一个包含模型,视图和Django代码,并且形式为独立Python包的完整Django应用。

对这一段的评论会显示在这里

在这里要先解释一些术语,初学者可能会混淆它们。 在第二章我们已经创建了 project , 那么 projectapp 之间到底有什么不同呢?它们的区别就是一个是配置另一个是 代码:

邓鹏 04-05 06:50

它们的区别就是一个是配置另一个是 代码->它们的区别就是,一个是配置,而另一个是代码

leejaen 02-26 11:08

thanks楼上,这才看懂

qq_345421243 05-09 09:21

project就是一个项目(或者说工程),这个项目包括了多个app和配置文件,而app就是一个单一的exe或其他后缀的文件,比如说腾讯QQ就是一个项目,而他下面的可执行文件,升级文件就是一个个的app 我一直是这么理解的

only 11-24 03:41

这个网站帮助很在,我也学习这个,并在我个人的网站 http://www.phpyrb.com 上写学习笔记了。

匿名读者 01-02 06:14

所以说views.py要放在app中

shanks 03-14 02:37

我觉得这里和1.5以上的版本不太符合,因为settings.py已经放在app里面了,project外面只有manage.py....

zabbix 09-30 07:43

robbert test

对这一段的评论会显示在这里

一个project包含很多个Django app以及对它们的配置。

对这一段的评论会显示在这里

技术上,project的作用是提供配置文件,比方说哪里定义数据库连接信息, 安装的app列表, TEMPLATE_DIRS ,等等。

对这一段的评论会显示在这里

一个app是一套Django功能的集合,通常包括模型和视图,按Python的包结构的方式存在。

对这一段的评论会显示在这里

例如,Django本身内建有一些app,例如注释系统和自动管理界面。 app的一个关键点是它们是很容易移植到其他project和被多个project复用。

对这一段的评论会显示在这里

对于如何架构Django代码并没有快速成套的规则。 如果你只是建造一个简单的Web站点,那么可能你只需要一个app就可以了; 但如果是一个包含许多不相关的模块的复杂的网站,例如电子商务和社区之类的站点,那么你可能需要把这些模块划分成不同的app,以便以后复用。

对这一段的评论会显示在这里

不错,你可以不用创建app,这一点应经被我们之前编写的视图函数的例子证明了 。 在那些例子中,我们只是简单的创建了一个称为views.py的文件,编写了一些函数并在URLconf中设置了各个函数的映射。 这些情况都不需要使用apps。

wzdxt 07-15 14:49

“应经”应为“已经”

smileMoo 12-03 08:51

不要老想着阴茎

Lion 01-22 07:58

apps》》app

桔了个仔 02-12 11:24

2楼大亮!!!!!!!!!!!

otis 03-28 06:48

2楼亮了

Johniarch 07-15 09:54

yingjing 想好久了

byrain 07-19 09:19

噗。。。2L。

Bruno 11-19 07:18

二楼不忍直视呀。。。

流沙 11-14 03:23

看文章,新闻之后你会觉得评论比内容好看,看视频你会觉得弹幕比视频更吸引人还更搞笑

对这一段的评论会显示在这里

但是,系统对app有一个约定: 如果你使用了Django的数据库层(模型),你 必须创建一个Django app。 模型必须存放在apps中。 因此,为了开始建造 我们的模型,我们必须创建一个新的app。

对这一段的评论会显示在这里

mysite 项目文件下输入下面的命令来创建books app:

对这一段的评论会显示在这里
python manage.py startapp books
fish 09-20 03:19

ubuntu下创建不要进入管理员模式

debuger 01-16 13:39

ubuntu下先要 sudo chmod 755 /usr/local/lib/python2.7/dist-packages/django/conf/app_template/* 才可以正常创建。

lin 06-03 15:13

我的目录结构是:mysite/mysite/settings.py 那项目路径是mysite还是mysite/mysite ? manage.py在mysite路径下面 settings.py在mysite/mysite下面 这里好糊涂啊 求指点

jack 07-01 13:38

@lin manage.py 同级的那个

mihello 08-03 07:40

应该是这样 mysite/mysite, mysite/books 这样的结构,books和最里面的mysite同级。我看1.6官方教程也是如此 https://docs.djangoproject.com/en/1.6/intro/tutorial01/

qwlhappy 12-08 12:12

应该是在settings.py那级目录下用 python ../manage.py startapp * 要不的话settings里面配置INSTALLED_APP时会出错,因为本来mysite.*的文件是在setting那一级下的

chaos 08-03 13:21

mysite文件夹下没有manage.py文件啊,是不是应该在根目录下呢

wooo 08-20 00:44

与manage.py同级的那个目录创建

对这一段的评论会显示在这里

这个命令并没有输出什么,它只在 mysite 的目录里创建了一个 books 目录。 让我们来看看这个目录的内容:

对这一段的评论会显示在这里
books/
    __init__.py
    models.py
    tests.py
    views.py
sammy 03-15 04:05

settings.py在哪里? 在下面使用validate的时候提示 "Error: No module named books"

luqq 03-22 09:40

用eclipse+pydev时如何创建呢,总不能每次都切换到命令行去吧。。

e2fsck 07-05 07:01

使用 eclipse 还是得用命令行创建,但是 1.4 新版,创建完了,还得移动到 mysite 目录里

西红柿 12-02 13:47

1.4的创建项目的时候就默认就创建了一个app了

ting 04-18 07:24

强烈不建议使用eclipse+PyDev 基本的文本编辑工具就可以了

Aaron 03-20 13:09

在eclipse pydev中 右键工程->Django -> create application(manage.py startapp) ->输入app名称 可实现相同功能

allen 06-27 09:35

django1.6 出现admin.py文件

haeckel 08-20 07:38

@allen 我也是的,求个人解释 admin.py是干嘛的

尛鱼 09-23 04:42

里面还有admin.py

knight 10-05 11:45

现在的目录: books/ admin.py __init__.py migrations/ __init__.py models.py tests.py views.py

misutt 10-19 02:32

同ls

匿名读者 07-29 06:46

kun

aika 11-03 09:55

为啥我的多了一个apps.py,这个谁来细说一下

lvhua 11-08 06:30

eclipse 创建方法:选中工程右键->django->create application(manage.py start app)

对这一段的评论会显示在这里

这个目录包含了这个app的模型和视图。

对这一段的评论会显示在这里

使用你最喜欢的文本编辑器查看一下 models.pyviews.py 文件的内容。 它们都是空的,除了 models.py 里有一个 import。这就是你Django app的基础。

对这一段的评论会显示在这里

在Python代码里定义模型

对这一段的评论会显示在这里

我们早些时候谈到。MTV里的M代表模型。 Django模型是用Python代码形式表述的数据在数据库中的定义。 对数据层来说它等同于 CREATE TABLE 语句,只不过执行的是Python代码而不是 SQL,而且还包含了比数据库字段定义更多的含义。 Django用模型在后台执行SQL代码并把结果用Python的数据结构来描述。 Django也使用模型来呈现SQL无法处理的高级概念。

mark 07-10 15:24

xhchen 11-13 09:38

这个学习网站实在太赞了,大家都是好人啊!

本节标题:defining models in python,应该翻译为 使用Python定义模型 03-14 03:01

QQasdhy 05-05 14:06

赞二楼

mzfly 12-27 05:40

这一句比较拗口:"Django模型是用Python代码形式表述的数据在数据库中的定义"

Megan 02-05 03:43

Django模型是用Python代码形式表述的数据在数据库中的定义。 这句话的意思是 Django 模型 是用python写的 就是模型类 Django会把模型类 翻译成数据库语言和相关操作 进而对数据库进行操作

对这一段的评论会显示在这里

如果你对数据库很熟悉,你可能马上就会想到,用Python SQL来定义数据模型是不是有点多余? Django这样做是有下面几个原因的:

zzm88 07-19 09:43

应该是“不用SQL,而用Python定义数据模型是不是有点多余?” 原文是instead of SQL

TaoBeier 06-21 07:41

应该是 “使用python 而不是SQL”

对这一段的评论会显示在这里

自省(运行时自动识别数据库)会导致过载和有数据完整性问题。 为了提供方便的数据访问API, Django需要以 某种方式 知道数据库层内部信息,有两种实现方式。 第一种方式是用Python明确地定义数据模型,第二种方式是通过自省来自动侦测识别数据模型。

wiboshu 01-13 02:03

overhead翻译为过载不易理解,应该是系统开销的意思

iComes 12-19 15:49

同意楼上:)

smileMoo 12-03 08:56

同意

这翻译。。。跪了呀 03-14 02:55

xavier 07-26 03:01

楼上你行你上啊

冯日 11-06 09:05

找了很多资料,这个网站是最好的中文学习网站了,幸苦了

xcgspring 04-20 08:39

相当一种缓存机制,运行时不用总查询数据库

Ignora 01-25 01:26

过载是overload,overhead从来都是开销的意思

对这一段的评论会显示在这里

第二种方式看起来更清晰,因为数据表信息只存放在一个地方-数据库里,但是会带来一些问题。 首先,运行时扫描数据库会带来严重的系统过载。 如果每个请求都要扫描数据库的表结构,或者即便是 服务启动时做一次都是会带来不能接受的系统过载。 (有人认为这个程度的系统过载是可以接受的,而Django开发者的目标是尽可能地降低框架的系统过载)。第二,某些数据库,尤其是老版本的MySQL,并未完整存储那些精确的自省元数据。

encompass 10-10 22:20

overhead此处不是过载的意思,上面有人说过了

对这一段的评论会显示在这里

编写Python代码是非常有趣的,保持用Python的方式思考会避免你的大脑在不同领域来回切换。 尽可能的保持在单一的编程环境/思想状态下可以帮助你提高生产率。 不得不去重复写SQL,再写Python代码,再写SQL,…,会让你头都要裂了。

Superobin 08-02 10:18

写这段话的人肯定没干过前端!

行之 12-18 17:44

ls笑死我了。 非常有同感。

sapjax 07-23 06:06

前端飘过...

yu 11-16 15:45

好多前端,呃,怎么都跑来看python了

silent 11-28 08:43

做后台的有几个没接触过前端的呢。

looly 01-20 13:54

看到一楼的我眼泪掉下来

桔了个仔 02-12 11:50

1楼真相帝!!!!!!!!!!!

skyfisher 04-02 02:00

严重顶一楼。刚开始接触web的时候一个星期之内在各种语言之中切换,从前端写到后台。简直要泪奔了。

ting 04-18 07:28

哎,说多了都是泪

Jason 06-15 03:36

清早起床,严肃地从头开始浏览整个教程,直到这里----欢乐终于来临!

前端加油 07-06 00:54

前端加油!

byrain 07-19 09:31

1L不哭么么哒

litbot 08-19 09:31

我看了这么久,发现评论才是亮点!

千里山南 01-04 12:19

前端欢乐多。。

doubi 05-23 10:01

公司的前端都是男的,怎么干啊……

wind 07-06 09:04

ls各种逗, 笑尿了, 这么欢乐的评注必须留座

heliar 07-15 14:07

正准备跳前段坑。。

cyhhao 09-09 12:03

为这欢乐的评论留个名 233333

zeroten 09-09 13:33

前端不哭~

小羽 09-29 06:54

我怎么感觉作后端的比作前端的更苦逼呢。。

friday 10-20 09:55

也来为如此欢乐的评注点个赞~~~2333

DK 10-22 03:18

從Html,CSS,JavaScript,Python,SQL,Django一路走來的表示流淚..

猪头哥哥 12-01 02:01

近几年前端一词被用烂了 看到就头痛 自己其实也算个前端 但是感觉要学的东西很多 现在没有纯前端了 你要懂一两门后端语言吧 python c# 数据库要懂吧 sql 前端框架呢 vue angular 后端框架呢 django flask spring 。懂了还不行,要会用,会用还不行,要会改。写了这么多只是发个牢骚,大家安心学习,升职加薪!

yananW 05-30 17:03

哈啊哈哈哇哈哈 2019年的我笑了出来

对这一段的评论会显示在这里

把数据模型用代码的方式表述来让你可以容易对它们进行版本控制。 这样,你可以很容易了解数据层 的变动情况。

对这一段的评论会显示在这里

SQL只能描述特定类型的数据字段。 例如,大多数数据库都没有专用的字段类型来描述Email地址、URL。 而用Django的模型可以做到这一点。 好处就是高级的数据类型带来更高的效率和更好的代码复用。

对这一段的评论会显示在这里

SQL还有在不同数据库平台的兼容性问题。 发布Web应用的时候,使用Python模块描述数据库结构信息可以避免为MySQL, PostgreSQL, and SQLite编写不同的CREATE TABLE

penuel 01-29 10:43

用多个数据库能理解,但是谁会把一样的数据表放在不同的数据的数据库里?那到底用哪一个,这句话真是多此一举

hogarth 05-16 10:04

就像我们的项目就出现过几次切换数据库的情况,而且代码里有大量写死的sql语句,像django这样子对不同数据库sql差异封装,的确是很省事的。

对这一段的评论会显示在这里

当然,这个方法也有一个缺点,就是Python代码和数据库表的同步问题。 如果你修改了一个Django模型, 你要自己来修改数据库来保证和模型同步。 我们将在稍后讲解解决这个问题的几种策略。

对这一段的评论会显示在这里

最后,我们要提醒你Django提供了实用工具来从现有的数据库表中自动扫描生成模型。 这对已有的数据库来说是非常快捷有用的。 我们将在第18章中对此进行讨论。

Jason 06-15 03:44

因为要集成一个外部系统,找到这个命令,python manage.py inspectdb 的确管用!

Ignora 01-25 01:42

突然发现点右边的评注栏会500 error

电饭锅 02-05 12:35

扫描数据库表自动生成模型很有用的样子

对这一段的评论会显示在这里

第一个模型

对这一段的评论会显示在这里

在本章和后续章节里,我们把注意力放在一个基本的 书籍/作者/出版商 数据库结构上。 我们这样做是因为 这是一个众所周知的例子,很多SQL有关的书籍也常用这个举例。 你现在看的这本书也是由作者 创作再由出版商出版的哦!

jarorwar 09-14 15:44

配置mysql的时候,用utf-8编码的话,会出现乱码? db=MySQLdb.connect(user="root",db="python",passwd="mxr",host="localhost",use_unicode=True,charset="utf8") 通过此种方式不会,但是在settings.py中那里配置charset呢?

wulfric 04-19 16:35

所以说还是python3好,什么都不用考虑,直接utf8了

匿名读者 10-12 02:21

model里面可以设 #coding=utf-8

penuel 01-29 10:45

python3 现在兼容性太差

对这一段的评论会显示在这里

我们来假定下面的这些概念、字段和关系:

对这一段的评论会显示在这里
  • 一个作者有姓,有名及email地址。
  • 出版商有名称,地址,所在城市、省,国家,网站。
  • 书籍有书名和出版日期。 它有一个或多个作者(和作者是多对多的关联关系[many-to-many]), 只有一个出版商(和出版商是一对多的关联关系[one-to-many],也被称作外键[foreign key])
boshao 04-22 09:49

书对出版商应该是多对一的关联关系(many-to-one)

tonylifei 06-02 14:52

只有一个出版商,所以和出版商应该是多对一的关联关系 ,对吗?

bobozhengsir 02-25 03:25

也有一本书有两个出版社的

吴振伟@thu 09-13 00:45

我的理解:这里更可能是想说“多对一”。一家出版商出版好多本书更合常理。我们可以先忽略一本书两个出版商的个例。因为“many-to-many”的例子已经在书和作者的关系中得到体现。

吴振伟@thu 09-13 00:49

从定义的角度,“外键”就是多对一的。

Aaron Lau 05-14 08:24

外键是这么理解的。 每本书只有一个出版社。 但是每个出版社可以发行有很多书。 这就是一对多。 生成数据库的时候,book表中,会有一个字段,显示的是对应的Publisher表中对应的出版社id值 这个就是外键了哦

匿名读者 06-18 02:49

没搞懂为什么书和作者会是many-to-many呢

zzm88 07-19 10:05

一本书可以有几个作者,一个作者也可以有几本书,所以是manytomany; 一个出版社可以有很多书,但一本书只可以有一个出版社,所以是onetomany

Lyrus 12-08 07:28

ls正解

zjuysw 03-20 15:03

To define a many-to-one relationship, use ForeignKey. 官方文档中的原文。所以我个人认为这里写错了

Django1.6 04-07 02:42

参考这个博客,说得很清楚,还有实例http://logic0.blog.163.com/blog/static/18892814620137343447299/

Ignora 01-25 01:47

一对多、多对一和多对多是关系型数据库的最基本知识,怎么这么多人不知道

对这一段的评论会显示在这里

第一步是用Python代码来描述它们。 打开由startapp 命令创建的models.py 并输入下面的内容:

对这一段的评论会显示在这里
from django.db import models

class Publisher(models.Model):
    name = models.CharField(max_length=30)
    address = models.CharField(max_length=50)
    city = models.CharField(max_length=60)
    state_province = models.CharField(max_length=30)
    country = models.CharField(max_length=50)
    website = models.URLField()

class Author(models.Model):
    first_name = models.CharField(max_length=30)
    last_name = models.CharField(max_length=40)
    email = models.EmailField()

class Book(models.Model):
    title = models.CharField(max_length=100)
    authors = models.ManyToManyField(Author)
    publisher = models.ForeignKey(Publisher)
    publication_date = models.DateField()
chen.yuehua 07-28 14:16

貌似URLField与EmailField类型的字段都需要一个max_length属性

hu 09-14 05:23

其他类型的变量呢?例如int型,时间型。

cuimuxi 12-11 16:13

django支持的其他类型参见: http://docs.djangoproject.com/en/dev/ref/models/fields/

Albert 07-20 13:38

为什么我的总是提示出错“Settings cannot be imported, because environment variable DJANGO_SETTINGS_MODULE is undefined.” 按照网上设置from django.conf import settings。。。方法设置,还是出现错误,提示settings already configured,这到底怎么回事,怎么设置?

hikui 09-11 07:00

这里所有的shell都应该是python manage.py shell,而不是直接python

xiami 05-10 08:47

为啥运行了python manage.py sqlall books 却在数据库里看不到新生成的表?

xiami 05-10 08:51

为啥运行了python manage.py sqlall books 却在数据库里看不到新生成的表? 找到答案了,继续往下看了,真的生成数据库表还要运行: python manage.py syncdb

askingyj 08-15 06:49

SQLite使用中发现:DateFile() 似乎在"python manager.py shell"命令中,会有"Runtime Warning",因为USE_TZ=True(默认)【settings.py】,而sqlite3中要求接受的是不包含tz的datetime。

skytraveler 02-19 06:52

那个书商的脚本从哪里搞到?木有个工具能生成or映射的代码么?

lemosa 07-03 07:42

ManytoManyField 中的小写T字母会折腾死,新人的。应该是 ManyToManyField

streethacker 07-23 07:21

为什么类属性都不带self参数?比如self.name/self.address?

jxxiaohou 11-13 13:04

类属性不需self,那是类的方法的第一个参数需要self

stevenlee87 06-25 06:06

django支持的其他类型参见: http://docs.djangoproject.com/en/dev/ref/models/fields/

shity boy 11-05 13:10

@streethacker,不带self的叫做类属性,带self的叫对象属性。建议找一下相关资料,这是python面向对编程的内容。

刘学 05-04 06:53

请问有人知道如何创建中文表和中文字段吗?

lyz 12-26 06:53

Django2.0 ForeignKey 需要添加参数on_delete publisher = models.ForeignKey(Publisher,on_delete=models.CASCADE)

对这一段的评论会显示在这里

让我们来快速讲解一下这些代码的含义。 首先要注意的事是每个数据模型都是 django.db.models.Model 的子类。它的父类 Model 包含了所有必要的和数据库交互的方法,并提供了一个简洁漂亮的定义数据库字段的语法。 信不信由你,这些就是我们需要编写的通过Django存取基本数据的所有代码。

Zcy 10-21 02:06

信不信由你,反正我是信了

twinkle 04-02 07:14

信不信由你,这个不得不信啊。

Mary 09-19 07:10

哈哈,看到这时,我信了。。。

tango 10-05 09:28

首先要注意的事是每个数据模型 多了一个“事”

looly 01-20 13:58

这里让我想起了Hibernate

tao 03-24 12:44

亲,这个我能不信吗?==

david 04-26 08:44

一定要手输吗?应该有一些工具可以提供映射

匿名读者 08-09 07:30

每个模型相当于单个数据库表,每个属性也是这个表中的一个字段

lincy 08-15 11:19

信不信由你,反正我是信了

lakshya 09-10 13:01

至于你信不信,我反正是信了

Tianbo Li 11-17 22:28

这里的评论太有爱了

首先要注意的事是每个数据模型都是 django.db.models.Model ,注意的“事”去掉 12-13 03:17

匿名读者 06-18 09:32

为什么要去掉

stevenlee87 06-25 06:10

信不信由你,反正我是信了

mihello 08-03 13:31

我也信了

psd 05-25 03:24

信不信由你,反正我是信了

Admin 10-13 07:07

I trust you!

不满 06-21 09:47

确实和hibernate很像

猪头哥哥 12-01 02:44

由不得你不信 我反正信啦

匿名读者 12-26 06:11

Django 2.0 里面,需要写成: publisher = models.ForeignKey(Publisher, on_delete='CASCADE')

反正我是信了 08-02 03:15

电饭锅 02-05 12:46

俺不信也不行啊,都来学了

陈中意 02-22 13:51

能怎么办,只能选择相信了

对这一段的评论会显示在这里

每个模型相当于单个数据库表,每个属性也是这个表中的一个字段。 属性名就是字段名,它的类型(例如 CharField )相当于数据库的字段类型 (例如 varchar )。例如, Publisher 模块等同于下面这张表(用PostgreSQL的 CREATE TABLE 语法描述):

对这一段的评论会显示在这里
CREATE TABLE "books_publisher" (
    "id" serial NOT NULL PRIMARY KEY,
    "name" varchar(30) NOT NULL,
    "address" varchar(50) NOT NULL,
    "city" varchar(60) NOT NULL,
    "state_province" varchar(30) NOT NULL,
    "country" varchar(50) NOT NULL,
    "website" varchar(200) NOT NULL
);
妖刀 08-29 07:24

为什么是book_publisher 而不是 publisher?

lalala23456 10-09 11:47

因为Publisher是一个类,这个表名是实例化后的对象

匿名读者 08-12 02:03

应该是publisher

匿名读者 08-12 02:06

自动生成的表名是app名称( books )和模型的小写名称 ( publisher , book , author )的组合

老马 06-15 09:57

不能自己指定表名吗?怎么指定哪些字段是主键?

kunnka wong 06-10 03:59

mysql5.7版本 copy这个来建表一直报符号错误,把 “ 全都换成 ` 就可以了 CREATE TABLE `books_publisher` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT 'books ID', `name` varchar(30) NOT NULL, `address` varchar(50) NOT NULL, `city` varchar(60) NOT NULL, `state_province` varchar(30) NOT NULL, `country` varchar(50) NOT NULL, `website` varchar(200) NOT NULL, PRIMARY KEY (`id`) )ENGINE=InnoDB AUTO_INCREMENT=257 DEFAULT CHARSET=utf8;

匿名读者 10-24 09:12

@kunnka wong 特来感谢

kunnka wong 12-23 01:29

楼上的,谢我也不留个名

流沙 11-14 03:49

@妖刀 @老马 因为Django在帮你创建表的时候自动加上了app的工程名,应该用意是为了区分那个app创建的吧,不过你可以尝试在创建model的类里创建一个内部类 Meta 用于指定model要创建的表名,比如我需要创建一个简单的User表: class User(models.Model): name = models.CharField(max_length=10, primary_key=True) #primary_key=True就是指定主键 pwd = models.CharField(max_length=16) def __str__(self): return self.name class Meta: db_table='user' #指定表名 ordering=['name'] #按照什么排序

对这一段的评论会显示在这里

事实上,正如过一会儿我们所要展示的,Django 可以自动生成这些 CREATE TABLE 语句。

对这一段的评论会显示在这里

“每个数据库表对应一个类”这条规则的例外情况是多对多关系。 在我们的范例模型中, Book 有一个 多对多字段 叫做 authors 。 该字段表明一本书籍有一个或多个作者,但 Book 数据库表却并没有 authors 字段。 相反,Django创建了一个额外的表(多对多连接表)来处理书籍和作者之间的映射关系。

demon 06-04 10:52

Book数据库表却并没有authors字段?

demon 06-04 13:13

懂了,是自己没弄清概念

LONNG 03-18 13:33

但 Book 数据库表却并没有 authors 字段.. 什么意思.. 不懂啊.

张晓 04-18 09:08

额外创建一个表来表示表结构之间的关系,可以django是如何知道,author和book有多对多的关系?

qq_345421243 05-10 01:01

Django不会在数据库表book中创建author这个字段,而是创建另外 一个表,这个表专门用与表示多对多的关系 个人理解,还没验证

Aaron Lau 05-14 08:18

多对多是这么理解的。 一本书 可能有一个或多个作者 一个作者,也可能也写过一本或者多本书 这就是many to many了

streethacker 07-23 07:17

ls二位正解,分别设置了Author和Book两张表,通过foreign key(外码)建立链接。这是关系数据库通常的做法。

boban 12-03 03:23

我啰嗦一下:上面定义了Publisher,Author,Book三个类,按照“每个数据库表对应一个类”的“原则”,执行python manage.py syncdb 应该创建三个表,但你可以看到(创建的时候就有打印显示)数据库里多了一个表(四个表)名为:book_authors ,这就是那个“额外的表”,是因为“多对多”字段的原因创建的。

Chai 02-07 08:21

多对多关系是没法用字段来表示的,需要用额外的一张表来维护多对多关系。

xavier 07-19 03:55

感谢楼上们

misutt 10-19 03:13

ls们太有爱~

console 10-20 14:36

这评论 设计真好

yuanlong 01-19 13:29

Yes,soga

xuxx09 07-20 11:54

这个关系表是自己自动维护的吗?还是需要admin手动维护

aaron 05-06 02:51

@ boban 感谢你的解答 ,真理越辩越明 大家一起讨论就更清楚了

stepone 08-26 03:51

不错的内容,不错的评注!看内容,遇到问题看评注,真心不错

对这一段的评论会显示在这里

请查看附录 B 了解所有的字段类型和模型语法选项。

chain 03-03 05:12

附录B在哪里看?

maivel 03-13 05:43

http://djangobook.py3k.cn/ 1.0里面有附录

follow-yz 07-26 01:34

https://docs.djangoproject.com/en/1.4/topics/db/models/

huanbaojieneng 12-14 04:00

http://djangobook.py3k.cn/appendixC/

wl 12-30 16:52

是不是这个地方?

wl 12-30 16:52

是不是这个地方? https://docs.djangoproject.com/en/dev/ref/models/fields/

lee 07-13 08:49

http://www.djangobook.com/en/2.0/appendixA.html

mr.liu 08-03 08:12

http://djangobook.py3k.cn/appendixB/

对这一段的评论会显示在这里

最后需要注意的是,我们并没有显式地为这些模型定义任何主键。 除非你单独指明,否则Django会自动为每个模型生成一个自增长的整数主键字段每个Django模型都要求有单独的主键。id

Chika 03-22 05:10

除非你单独指明,否则Django会自动为每个模型生成一个自增长的整数主键字段id。每个Django模型都要求有单独的主键。

zjb 01-09 06:51

这里如何单独指明一个自增长主键

xavier 07-26 03:36

听起来不错

mihello 08-03 14:15

@zjb https://docs.djangoproject.com/en/1.6/topics/db/models/#automatic-primary-key-fields

对这一段的评论会显示在这里

模型安装

对这一段的评论会显示在这里

完成这些代码之后,现在让我们来在数据库中创建这些表。 要完成该项工作,第一步是在 Django 项目中 激活 这些模型。 将 books app 添加到配置文件的已安装应用列表中即可完成此步骤。

对这一段的评论会显示在这里

再次编辑 settings.py 文件, 找到 INSTALLED_APPS 设置。 INSTALLED_APPS 告诉 Django 项目哪些 app 处于激活状态。 缺省情况下如下所示:

Nicky 12-24 02:01

使用了django1.4.3,创建project的时候(例如名字叫test),test内自动生成了一个叫test的文件(与manage.py同级),其中包含settings.py。 我们创建了books这个app之后,里面没有settings.py,其实只要编辑test里面那个settings.py就好了。另外,添加到INSTALLED_APPS里面的是‘books’。本人曾画蛇添足地把settings.py复制到books里面修给这个settings,结果报错Error: App with label books could not be found. Are you sure your INSTALLED_APPS setting is correct?

horizon 03-24 03:09

谢谢Nicky的说明,意思就是setting.py其实是整个project的配置文件是吧。我说在books里面怎么没有setting.py呢。

Lyrus 12-08 08:25

settings.py就是整个project的配置文件

xavier 07-26 03:38

就只有一个settings.py

Lily Paper 10-27 08:57

不管怎么说,这个settings.py一定是工程项目里的配置文件

对这一段的评论会显示在这里
INSTALLED_APPS = (
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.sites',
)
Jeff 02-24 16:13

'django.contrib.messages', 我的代码咋还有这段?

snyh 05-13 09:18

To Jeff 新版本的django 移除了contrib.auth的message message单独作为一个app了

sammy 03-15 04:09

想请问下这里的settings.py在是在哪里? 因为books目录里肯定没有manage.py 又在books的上层目录,很疑惑

sammy 03-15 04:28

弄清楚了目录是mysite/books 我把books放到了与mysite(或者manage.py)的同级目录里了settings.py在mysite目录里,books要创建在与settings.py的相同目录里 那这里创建books app的时候应该使用 python ../manage.py startapp books 不然mysite的项目里面没有manage.py

攀登 03-27 14:16

django 1.3.1中INSTALLED_APPS中默认有六个项目,MIDDLEWARE_CLASSES中有四个项目

ting 04-18 07:44

我的默认 INSTALLED_APPS = ( 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.sites', 'django.contrib.messages', 'django.contrib.staticfiles', # Uncomment the next line to enable the admin: # 'django.contrib.admin', # Uncomment the next line to enable admin documentation: # 'django.contrib.admindocs', )

匿名读者 06-18 02:54

Django 1.5中的默认配置: INSTALLED_APPS = ( 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.sites', 'django.contrib.messages', 'django.contrib.staticfiles', # Uncomment the next line to enable the admin: # 'django.contrib.admin', # Uncomment the next line to enable admin documentation: # 'django.contrib.admindocs', )

haeckel 08-20 08:23

django 1.6.5: INSTALLED_APPS = ( 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', )

对这一段的评论会显示在这里

把这四个设置前面加#临时注释起来。 (这四个app是经常使用到的,我们将在后续章节里讨论如何使用它们)。同时,注释掉MIDDLEWARE_CLASSES的默认设置条目,因为这些条目是依赖于刚才我们刚在INSTALLED_APPS注释掉的apps。 然后,添加‘mysite.books’INSTALLED_APPS 的末尾,此时设置的内容看起来应该是这样的:

杨锴 03-21 09:34

我用的ubuntu,Django1.6.2,有两层mysite目录,INSTALLED_APPS里面填books(不加mysite),才能通过validate。

ak47 03-24 07:18

1.6.2不用加project名了,官网上说的

Young 05-12 02:05

MIDDLEWARE_CLASSES这个设置是用来做甚的?

mihello 08-03 14:20

@zjb 官网的不用加是因为 mystie/polls 和 mysite/mysite 同级都被最外层的mysite包裹着。

Andy 12-07 09:32

貌似直接添加app名称也可以,不用指定路径

对这一段的评论会显示在这里
MIDDLEWARE_CLASSES = (
    # 'django.middleware.common.CommonMiddleware',
    # 'django.contrib.sessions.middleware.SessionMiddleware',
    # 'django.contrib.auth.middleware.AuthenticationMiddleware',
)

INSTALLED_APPS = (
    # 'django.contrib.auth',
    # 'django.contrib.contenttypes',
    # 'django.contrib.sessions',
    # 'django.contrib.sites',
    'mysite.books',
)
andytang 04-15 22:01

In the SETTING_APP, The 'mystie.books' should be 'books'. otherwise will lead the ERROR 'NO MODULE NAMED BOOK'

吴帅 05-03 09:13

INSTALLED_APPS里默认有6个app了。 此处添加的app应该是‘books’,'mysite.books'会报错‘Error: No module named books ’

bruce 07-01 05:43

django-admin.py startproject mysite, 1.4会在mysite下多一个mysite文件夹, mysite/mysite,startapp新建的app在第一个mysite下 所以直接boos app即可, 如果用mysite.books 则表示books app是在mysite/mysite/books

Louis Lou 07-19 04:17

INSTALLED_APPS里应该是books,写mysite.books会报错误Error: No module named books

iamted 08-21 03:34

应该是"books"

Smarty 11-17 03:03

真狗1.4是不是'mysite.books'->'books',觉得后一种好

匿名读者 03-20 07:58

1.4之后直接跟APP名称了

张晓 05-10 00:09

这里应该是books,不是mystie.books

Tomoya 06-14 13:12

应该是"books"应该是"books"应该是"books"应该是"books"应该是"books"应该是"books"!!!!!

Jasper 07-31 06:42

'mysite.books'应该改成'books'.因为所建的“books”处在project“mysite”下,所以直接'books'就OK

francis 08-05 10:47

'mysite.books'应该改成'books'.

ben 08-14 07:17

mysite.books 应该改为books, 如果用mysite.books会找不到模块。

jwfy 09-12 08:57

AttributeError: 'module' object has no attribute 'Modle' 为什么我的显示是这个,这里我知道是“books”,模块对象没有对象模型????求解释!!!

microivan 09-15 03:49

之所以这么写,是因为文章的意思是把books放在了mysite\mysite\目录下,所以mysite.books是对的

jwfy 09-20 04:16

ls 说的好,我也一直纳闷为什么都这样写,想想还是路径的问题

Harry 11-23 14:20

确实如楼上所说,此处应该写成 books , 如果写的是 mysite.books , 会报错。

Harry 12-02 05:33

教程中提到了以下4行: # 'django.contrib.auth', # 'django.contrib.contenttypes', # 'django.contrib.sessions', # 'django.contrib.sites', 另外INSTALLED_APPS还多出了以下3行: # 'django.contrib.admin', # 'django.contrib.messages', # 'django.contrib.staticfiles', 刚开始没有注释掉,结果报错,注释掉后就 0 errors 完整如下: INSTALLED_APPS = ( # 'django.contrib.auth', # 'django.contrib.contenttypes', # 'django.contrib.sessions', # 'django.contrib.sites', # 'django.contrib.admin', # 'django.contrib.messages', # 'django.contrib.staticfiles', 'books', ) MIDDLEWARE_CLASSES = ( # 'django.middleware.common.CommonMiddleware', # 'django.contrib.sessions.middleware.SessionMiddleware', # 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.middleware.csrf.CsrfViewMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware', )

小武 02-26 17:22

INSTALLED_APPS下所有的都要注释掉,‘books'。另一个也是

bger 03-02 06:40

我修改后 Put 'django.contrib.admin' in your INSTALLED_APPS setting in order to use the admin application.

adamee 05-23 08:37

过来人提醒: books文件夹应该在与manage.py同级的目录里面而不是在mysite/mysite/目录下面,后面的使用时候都是将books作为一个独立app,而不是在mysite/mysite/里面,这里引用的mysite.books也应该改成books,而这些,也跟官网上说的基本相符,可以参考一下这里:https://docs.djangoproject.com/en/1.6/intro/tutorial01/#creating-models

adamee 05-23 08:38

Your apps can live anywhere on your Python path. In this tutorial, we’ll create our poll app right next to your manage.py file so that it can be imported as its own top-level module, rather than a submodule of mysite. 注意这句

Beta 06-30 03:23

如果books和mysite在同级目录,mysite.books改成books即可!

xavier 07-26 03:43

还有好多人没搞清楚目录怎么放= =

mihello 08-03 14:24

Jasper 正解,如果实在不清楚目录结构,可以看看官网例子。

唐琅 03-24 12:38

确实应该直接books,bruce说得对

QQasdhy 05-05 14:17

1.6验证只跟app名即可

匿名读者 07-29 07:23

kun

alex 11-11 16:10

这本书版本有点老,django1.9b +python2.7 表示 确实应该只是“books”

nohtyp 12-21 01:25

CommandError: App 'books' has migrations. Only the sqlmigrate and sqlflush comma nds can be used when an app has migrations. 我改成了<'books',>为啥会出现上述这个问题

qwe 01-18 08:55

改了后还是‘Error: No module named books ’

kum 02-15 15:02

python2.7+django1.9.1不再需要把这些注释了,注释后反而会出错提示RuntimeError

Tamarous 05-20 06:05

Python2.7.11+ Django1.9.1 不需要再进行注释。如果注释的话,会报“App books could not be found”的错误。直接在INSTALLED_APP中添加books即可。

leelir 07-18 06:48

改成books以后 出现了‘Error: No module named books ’

makeapp 08-31 14:44

You should not comment settings in "INSTALLED_APPS" or the compiler will reject you with "RuntimeError: Model class django.contrib.contenttypes.models.ContentType doesn't declare an explicit app_label and isn't in an application in INSTALLED_APPS." Also, you should use python manage.py check instead of validate.

不满 06-21 14:09

感谢大家,不然我这根本调不过去,确实不能注释掉!否则报错!

安铺靓仔明 07-21 01:11

django3 只需往install_app 中添加'books.apps.PollsConfig'即可,其余都不用改,还有一点,在创建好app后,应当先运行python manage.py migrate来进行迁移

安铺靓仔明 07-21 01:23

上面写错了,不是books.apps.PollsConfig,而是books.apps.booksConfig,这是因为,在django3中,当运行完python manage.py startapp books后,Django会自动在books文件夹下创建一个apps.py,里面只有一个类,类名为booksConfig

安铺靓仔明 07-21 01:25

这个books第一个字母应该要大写,因为是类名,BooksConfig

安铺靓仔明 07-21 01:32

django3,在修改model.py后,应当python manage.py makemigrations books

安铺靓仔明 12-05 03:49

说说为什么是books.apps.BooksConfig?首先“books”是我们创建的app名字,“apps”就是books文件夹下的apps.py文件,而BooksConfig就是apps.py里面已经创建好的一个类

对这一段的评论会显示在这里

(就像我们在上一章设置TEMPLATE_DIRS所提到的逗号,同样在INSTALLED_APPS的末尾也需添加一个逗号,因为这是个单元素的元组。 另外,本书的作者喜欢在 每一个 tuple元素后面加一个逗号,不管它是不是 只有一个元素。 这是为了避免忘了加逗号,而且也没什么坏处。)

Sirius 12-09 12:08

略有喜感

虎头蔓 01-08 06:35

弱弱的问一下这里的 'mysite.books' 是当前的项目名+app名称的意思吗? 也就是这里项目名称叫mysite?

公仔面 01-17 08:58

回楼上的,在Django1.6.2之后就不需要再加project命,mysite是project名。此处直接用books即可。

匿名读者 07-31 05:32

kun

yaya 03-29 14:04

是的,直接'books'即可。不用加project的mysite目录了。

炜越 05-22 05:50

同,不需要添加project,无知地调了好久

对这一段的评论会显示在这里

'mysite.books'指示我们正在编写的books app。 INSTALLED_APPS 中的每个app都使用 Python的路径描述,包的路径,用小数点“.”间隔。

对这一段的评论会显示在这里

现在我们可以创建数据库表了。 首先,用下面的命令验证模型的有效性:

对这一段的评论会显示在这里
python manage.py validate
william 03-30 10:03

这里我运行validate之后,提示No module named adminmysite.books.我数据库是直接添加的一个空文件,是需要在xx.db中写入数据吗?

yetone 04-11 03:13

把上文中settings.py中的模型名‘mysite.books'改成'books'即可通过认证,因为你的模型文件夹实在当前目录下而不是mysite目录下

Eric Su 09-17 10:56

这个挺逗。

eddie 12-22 14:29

'No module named adminmysite.books.' 相信有这个搞错的人不少吧...

zlleah 12-24 05:03

No module named books.问题上一个讨论已给出原因和解决方案

匿名读者 03-11 14:24

上文中的 'mysite.books', 需要改成 'books', 原因是是路径问题

Liudroid 03-24 11:13

我也出现这个问题了,解决了,谢谢前面的评论

Kevin 05-08 07:30

网站的评注功能,同时可以作为在线阅读的帮助。 这样的想法很牛逼。 可以有更多的技术书籍放上来,会有更多的人添加评注。

匿名读者 05-16 14:07

谢谢前面的解决方案

simons 06-18 03:00

感谢分享

Xoozi 07-31 09:47

总有种在看弹幕视频的感觉

Alice 09-02 06:18

我定义了一个浮点型字段 V01000 =models.FloatField(max_digits=10,decimal_places=4) 报错TypeError: __init__() got an unexpected keyword argument 'max_digits' 希望能看一下附录,解释浮点型的定义规范,谢谢

特里 09-03 06:04

特别要注意字段类型 CharFiled,EmailField....等等的名称,两个单词,每个单词第一个字母大写。

maoyezuo 09-05 02:14

改成'books'后,报错变成Error: No module named books .有人有同样问题吗?

maoyezuo 09-05 02:31

我缺少了一步python manage.py startapp books

王杰 09-10 08:07

改成‘book’后就没有错误了

zhufree 10-18 14:35

moduel object has on attribut model,改成books之后就出现这个问题是怎么回事

gafek 10-22 03:08

我的提示: UnicodeDecodeError: 'ascii' codec can't decode byte 0xb2 in position 20: ordinal not in range(128),请问是什么原因啊

匿名读者 11-11 04:51

这里的是在默认路径是什么?

grusirna 11-29 13:20

no modul?我也出现了这个问题,看后面mysite.books再加上整个文件系统布局,我考虑应该把app创建在mysite里,即存在urls.py的同级目录下,而不是跟manage.py同级的目录;不知道理解对否

JX 12-01 09:29

我也是这个提示: UnicodeDecodeError: 'ascii' codec can't decode byte 0xb2 in position 20: ordinal not in range(128),谁知道是什么原因啊?

zbzcool 12-08 12:51

hao

chiedey 04-13 02:30

有时候需要灵活处理,译文意思是包含mysite.book模块,位置是mysite.book,如果你的app位置不是这个,当然回出错,其他的我就不多说里

adamee 05-21 05:46

配置文件顶部少了编码格式声明 #coding:utf-8 UnicodeDecodeError: 'ascii' codec can't decode 然后运行时候出错了,今天把这个记录一下,为有可能出同样错误的coder提醒下下

xavier 07-19 04:03

0 errors found!!

mosy 08-19 06:21

错误,提示MaxLength,我的1.6的版本要改成max_length,但是 No module named Image何解?

Tiangang Xu 09-23 07:05

1.7版本的,可能有人会出现下面的错误: System check identified some issues: WARNINGS: ?: (1_6.W001) Some project unittests may not execute as expected. HINT: Django 1.6 introduced a new default test runner. It looks like this project was generated using Django 1.5 or earlier. You should ensure your tests are all running & behaving as expected. See https://docs.djangoproject.com/en/dev/releases/1.6/#new-test-runner for more information. 在setting里面加入TEST_RUNNER = 'django.test.runner.DiscoverRunner'

console 10-21 08:14

django 版本1.6 这边显示"validate" has been deprecated in favor of "check". 貌似validate已经过时

无名小卒 11-10 09:28

ls说的对 好像被check代替了

jowhok 12-29 03:45

diango 1.7.1 显示system check identified no issues (0 silenced)

Derek Fang 04-10 01:05

validate已经被废弃,使用check 代替 validate

sssa 04-19 07:17

django.db.utils.OperationalError: (1049, "Unknown database 'books'") 这个是什么情况,有人遇到吗

匿名读者 07-29 07:44

kun

mr.liu 08-03 08:23

python manage.py check

friday 09-12 02:47

no module named 'mysite.books', 把books 文件夹移动到mysite文件夹下解决

echoshu 11-19 01:37

书的内容和现在用的版本有些不一样,还好有评注

匿名读者 03-10 03:28

按上面的写会报错:RuntimeError: Model class django.contrib.contenttypes.models.ContentType doesn't declare an explicit app_label and isn't in an application in INSTALLED_APPS. 把INSTALLED_APPS 和 MIDDLEWARE_CLASSES取消注释解决

yaya 03-29 14:03

validate已经被弃用,改为check. RemovedInDjango19Warning: "validate" has been deprecated in favor of "check". ---------- >>>python manage.py check System check identified no issues (0 silenced).→出现这样的结果就是没有问题。

Pythongreenhand 04-09 09:40

yaya ,谢谢你的评注,validate已经停用,高版本用check

zlxs 04-17 16:44

按上面的写会报错:RuntimeError: Model class django.contrib.contenttypes.models.ContentType doesn't declare an explicit app_label and isn't in an application in INSTALLED_APPS. 把INSTALLED_APPS 和 MIDDLEWARE_CLASSES取消注释解决 --------------------------------------------------------- 那他这样做与你这样做 会出现矛盾的吧?

zlxs 04-17 16:57

按上面的写会报错:RuntimeError: Model class django.contrib.contenttypes.models.ContentType doesn't declare an explicit app_label and isn't in an application in INSTALLED_APPS. 把INSTALLED_APPS 和 MIDDLEWARE_CLASSES取消注释解决 --------------------------------------------------------- 这样做的话 会导致下面自动创建表时会出现很多其他表

匿名读者 04-29 03:58

python manage.py check 最新的版本用这个命令检查,正解

aaron 05-06 03:04

python manage.py validate 会显示 unknown command ‘validate’ 要使用 python manage.py check 才行 评论区 真实帮了大忙了 感谢大家的分享讨论

Thibault 05-25 09:58

按上面的写会报错:RuntimeError: Model class django.contrib.contenttypes.models.ContentType doesn't declare an explicit app_label and isn't in an application in INSTALLED_APPS. 把INSTALLED_APPS 和 MIDDLEWARE_CLASSES取消注释解决 --------------------------------------------------------- 1.9版本,INSTALLED_APPS里面的东西不注释会出现上面的错误,注释 了在后面会生成很多其他的表格,怎么解决?

仅仅取消'django.contrib.contenttypes' 的注释 08-19 04:33

CHENG CHEN 04-05 15:19

1, 如果你用的Django 1.10, 那么不需要注释掉 APP 跟 MIDDLEWARE,直接在APP里加个 'books' 即可 2,不是 python manage.py validate,而是 python manage.py check

vivi 04-27 03:18

1、mysite.boos改为books否则报错。 2、settings设置中INSTALLED_APPS MIDDLEWARE的默认内容不要注销,否则也会报错。 3、validate改为check。

不满 06-21 14:11

楼上总结到位,赞一个!!!

xiaopanddxiong 08-08 03:31

1.11版本django 不要添加MIDDLEWARE_CLASSES = (****)这个 在INSTALLED_APPS的最后一行添加'books',即可 执行python manage.py check

匿名读者 08-20 13:10

使用pycharm创建的django项目,并且在创建项目的时候,创建app,比如创建一个blog的app,会自动在app列表创建 'blog.apps.BlogConfig',,使用Python manage.py check 进行检查,其他的几个不要注释掉,就不会报错了, 这种学习方式太牛逼了,学成一定要做一个这样的,太牛逼了。直接搞一个完整的项目,来进行分析学习

Elise 12-18 11:30

使用django2的童鞋,外键那里应改为 publisher = models.ForeignKey(Publisher,on_delete=models.CASCADE,)

tets 03-07 14:39

楼上正解

kabumin 06-06 01:25

django2.0不需要注释上面那些,并且楼上正解

匿名读者 11-25 02:26

楼上好银啊

xxky 06-04 02:01

python manage.py check

对这一段的评论会显示在这里

validate 命令检查你的模型的语法和逻辑是否正确。 如果一切正常,你会看到 0 errors found 消息。如果出错,请检查你输入的模型代码。 错误输出会给出非常有用的错误信息来帮助你修正你的模型。

chj 07-13 09:08

new version Django,result is like this: python manage.py check System check identified no issues (0 silenced).

Lionel.Shen 10-10 07:36

python manage.py validate 命令在django1.10版本后好像是不存在了,这里的内容是否应该修改一下。

HaiYang Wang 03-06 07:54

python2.7测试为python manage.py check

匿名读者 07-20 07:26

System check identified no issues (0 silenced). ---- python3 Django1.11

猪头哥哥 12-01 03:00

django1.11+py3.5========== python manage.py check 回复System check identified no issues (0 silenced).

lyz 12-26 07:15

Django 2.0+python3.6 显示System check identified no issues (0 silenced).

对这一段的评论会显示在这里

一旦你觉得你的模型可能有问题,运行 python manage.py validate 。 它可以帮助你捕获一些常见的模型定义错误。

对这一段的评论会显示在这里

模型确认没问题了,运行下面的命令来生成 CREATE TABLE 语句(如果你使用的是Unix,那么可以启用语法高亮):

对这一段的评论会显示在这里
python manage.py sqlall books
垚仙 10-24 14:15

no database selected DATABASE_NAME 不是数据库名; NAME才是! 好坑人啊!

lemosa 12-05 13:37

new version django 1.4.2 use the new command to maked the sql python manage.py sql books

allen 05-16 14:19

DatabaseError: (1046, 'No database selected')

pedro 05-31 09:05

我用的postgresql,在这一步出现OperationError 怎么破?

蔡栋梁 07-26 03:35

我的目录结构 E:\mysite\books (app) E:\mysite\manage.py E:\mysite\mysite (mysite下包含settings.py) books app和mysite的module是同一个层级 我在E:\mysite\mysite的settings.py里设置MIDDLEWARE_CLASSES = ( 'books', ) 运行python manage.py validate 没问题 运行python manage.py sqlall books 报错 错误信息:CommandError: App with label books could not be found. Are you sure your INSTALLED_APPS setting is correct? 参照了各位的评注,还是没解决,大家有没有比较详细的解决办法,谢谢了。

蔡栋梁 07-26 04:15

不好意思,上面的INSTALLED_APPS = ( # 'django.contrib.auth', # 'django.contrib.contenttypes', # 'django.contrib.sessions', # 'django.contrib.sites', # 'django.contrib.messages', # 'django.contrib.staticfiles', # Uncomment the next line to enable the admin: # 'django.contrib.admin', # Uncomment the next line to enable admin documentation: # 'django.contrib.admindocs', 'books', )应该设置在这里的,已经ok了。

pengda 09-05 17:45

我也出现DatabaseError: (1046, 'No database selected'),之前都OK。有谁能帮助下么?

pengda 09-07 08:36

原来之前设置DATABASE里没有写名字

jwfy 09-20 04:53

CommandError: Django doesn't know which syntax to use for your SQL statements, because you haven't properly specified the ENGINE setting for the database. see: https://docs.djangoproject.com/en/dev/ref/settings/#databases 这是什么情况?我没安装数据库么。。。。

Eric 04-14 12:50

执行语句之后报错:django.db.utils.OperationError: unable to open database file 将setting中的DATABASE的name改成: 'NAME': './database.db3', 成功执行。 好奇怪的现象

medal 05-07 03:40

我显示的是用户password认证失败的错误,该怎么改呀?

xavier 07-26 03:46

楼上,你密码填错了。。

匿名读者 08-03 13:40

需要新命令 python manage.py makemigrations books https://docs.djangoproject.com/en/dev/intro/tutorial01/

erik 09-01 01:59

新版这里应该使用 python manage.py makemigrations books python manage.py sqlmigrate books 0001 python manage.py migrate

jude 09-15 12:57

django 1.6.6 使用给出来的命令OK

TTTsand 09-16 07:14

Django 1.7 要用python manage.py makemigrations books 和python manage.py sqlmigrate books 0001

guanbin 09-29 12:36

新版是:python manage.py migrate

syshu 10-10 07:37

makemigrations books 创建修改0001 sqlmigrate books 0001 查看修改0001 migrate 应用修改到数据库

无名小卒 11-10 10:11

完整的写法: 1 python manage.py sqlmigrate books 2 python manage.py sqlmigrate books 0001 3 python manage.py migrate

NigelYang 11-20 07:55

@syshu 你是对的!

abel的幸福 12-08 13:49

1.6版应该是python manage.py syncdb吧

杨大眼 01-22 03:50

python manage.py sqlmigrate books 0001 这里的0001是怎么回事;而且我生成的表里面有一个django_migrations表 ?为什么

lili 01-23 07:26

1.7后先用python manage.py makemigrations books 根据显示的编号比如(0001)python manage.py sqlmigrate 0001

Dust 02-01 06:40

django1.7 下方法有改变 1,在添加了新的 app 之后,我们需要运行下面命令告诉 Django 你的模型做了改变,需要迁移数据库: python manage.py makemigrations books 2,运行下面语句,你可以查看迁移的 sql 语句: python manage.py sqlmigrate polls 0001 3,你可以运行下面命令,来检查数据库是否有问题: python manage.py check 4,运行下面的命令,来创建新添加的模型 python manage.py migrate

qiaoqiao 02-04 04:29

求大神指点,在输入python manage.py sqlall books出错如下: django.db.utils.OperationalError: (1045, "Access denied for user 'root'@'localhost' (using password: YES)")。

tooytoos 02-10 13:23

CommandError: App 'books' has migrations. Only the sqlmigrate and sqlflush commands can be used when an app has migrations. 出现这个是什么情况??输入的是: python manage.py sqlall books

HoHo 03-02 02:53

django1.7 前两条命令 1 python manage.py sqlmigrate books 2 python manage.py sqlmigrate books 0001 都正常执行,第三条命令 python manage.py migrate 报错 django.db.utils.ProgrammingError:(1064,"You have an error in your SQL syntax check the manual that corresponds to your MySQL server version for the right syntax to near '%s, %s, %s)' at line 1" 语法错误?版本mysql5.1.73 求教

Niketim 04-10 12:12

要用python manage.py makemigrations books迁移数据库

杜玉涛 04-27 06:57

python manage.py migrate

anonymous 12-03 06:30

sqlall 语句貌似已经过期了 官方文档中有写需要其他指令来执行了 python manage.py makemigrations books 然后再执行下面的语句 python manage.py sqlmigrate books 0001 即可

zeming 02-25 08:22

[root@xzm-centos-2 mysite]# python manage.py sqlall books CommandError: App 'books' has migrations. Only the sqlmigrate and sqlflush commands can be used when an app has migrations. 解决输入 python manage.py sqlmigrate books 0001

yaya 03-29 14:25

sqlall指令已经过期,改为, 第一步,迁移数据库:python manage.py makemigrations books 第二步,创建数据库表: python manage.py sqlmigrate books 0001

yaya 03-29 14:32

然后就会自动生成下面五张表, CREATE TABLE "books_author" CREATE TABLE "books_book" CREATE TABLE "books_book_authors" CREATE TABLE "books_publisher" CREATE TABLE "books_book__new" CREATE INDEX "books_book_2604cbea" ON "books_book" ("publish er_id");

cc 03-30 05:49

1.9版本是先执行python manage.py makemigrations 后在执行python manage.py migrate

这些评论太重要了 05-02 02:54

aaron 05-06 03:25

win10 64位 python2.7 django1.9 亲测有用 第一步 python manage.py makemigrations books 第二步 python mange.py sqlmigrate books 0001 第三步 python manage.py migrate 评论简直太有用了

风之岚 05-10 14:22

CommandError: App 'books' has migrations. Only the sqlmigrate and sqlflush commands can be used when an app has migrations. 怎么解决

Tamarous 05-20 07:02

配合此教程一起学习效果更佳: http://python.usyiyi.cn/django/intro/tutorial01.html

HD 05-24 11:41

1.9.5版本 python manage.py makemigrations 用来检测数据库变更和生成数据库迁移文件 python manage.py sqlmigrate demo 0001_initial 用来把数据库迁移文件转换成数据库语言 python manage.py migrate 用于执行迁移动作

实在是感谢前辈阿 批注太有帮组 这个东东真是好东东 06-03 07:22

old nine 10-25 07:24

求大神指点一下,django1.5.12 执行python manage.py sqlall books 报错是:Django doesn't know which syntax to use for your SQL statements,bacause you haven't properly specified the ENGINE setting for the database.怎么办

q2z2012 01-17 09:16

关于自己manage.py到底支持那种写法,可以用【python manage.py help >>d:\a.txt】。【>>d:\a.txt】是复制到XX地方,该文档时manage可支持的所有写法。

q2z2012 01-17 09:25

纠正:是manage.py 后面带的后缀内容。

HaiYang Wang 03-06 07:55

python2.7测试为python manage.py makemigrations books

app 03-27 04:33

安装了个1.5版本都出错.直接升级最新的做了.

vanpersiexp 05-08 06:57

python3 manage.py makemigrations books python3 manage.py migrate books 这两句可以生成之前定义好的table 如果不知道新版的命令可以这样查: python3 manage.py help

东虫夏草 06-02 03:37

python manage.py sqlall books报错: 这是因为旧版本和新的版本命令已经不一样 的问题。 我用的是django =1.8.3, 写好自己的model以后可以换成这样的命令来生成数据库表: python manage.py makemigrations books搜索 然后:python manage.py sqlmigrate books 0001 这样就可以CREATE TABLE 了

不满 06-21 14:32

看到上面的评论中有: 1 python manage.py sqlmigrate books 2 python manage.py sqlmigrate books 0001 3 python manage.py migrate 我只执行了1和3也能生成数据表,具体原因不明...

匿名读者 08-20 15:06

django1.9 亲测有用 第一步 python manage.py makemigrations books 第二步 python mange.py sqlmigrate books 0001 第三步 python manage.py migrate 评论简直太有用了 通过运行,这次代码中是要新建了三个表,分别是1:Publisher 出版商 2:Author作者 3:Book书名 ,但是实际中会创建4个表,因为在book里面有一个对应关系表

匿名读者 11-17 03:07

使用新版本的会提示没有validte命令,要用check命令代替 sqlall命令 使用 makemigrations books

pbox 12-20 06:00

django 1.11, python manage.py validate改为python manage.py check;python manage.py sqlall books改为python manage.py makemigration books

lyz 12-26 07:21

django2.0 亲测有用 第一步 python manage.py makemigrations books 第二步 python mange.py sqlmigrate books 0001 第三步 python manage.py migrate

大宝 01-22 06:59

我用的是MySQL,把settings.py里面的DATABASE的NAME写成mysql就能正确输出

大宝 01-22 07:00

我用的是MySQL,python2.7,django1.3。把settings.py里面的DATABASE的NAME写成mysql就能正确输出

zoulf 04-02 11:44

python manage.py sqlmigrate 可有可无,其作用是显示原生的SQL语句。

匿名读者 10-30 03:02

oracle-02000缺少always关键字,这个是版本问题,需要升级oracle版本到12以上或降级django版本到1.x

匿名读者 04-23 12:26

django2.2+Python3.6 运行 python manage.py makemigrations books 出现错误:AttributeError: 'str' object has no attribute 'decode'。此时需要将/django/db/backends/mysql/operations.py中的这句 query = query.decode(errors='replace')改为 query = query.encode(errors='replace')。也就是将decode改为encode!

匿名读者 07-02 09:57

报错无sqlall,看了ls们的解释,逐个运行以下可解 python manage.py makemigrations books python manage.py migrate python manage.py sqlmigrate 0001

匿名读者 11-25 02:41

楼上貌似 第二步是迁移所有app, 第三步是迁移单个app, 所以应该不需要第三步。

匿名读者 11-25 02:45

Django2.0 数据库迁移的两大命令: python manage.py makemigrations & python manage.py migrate 前者是将model层转为迁移文件migration,后者将新版本的迁移文件执行,更新数据库。 这两中命令调用默认为全局,即对所有最新更改的model或迁移文件进行操作。如果想对部分app进行操作,就要在其后追加app name python manage.py makemigrations app_name python manage.py migrate app_name 如果想要精确到某个迁移文件(0004_xxx.py): python manage.py migrate app_name 0004

橙子 10-15 11:31

python manage.py check 命令检查项目模型的语法和逻辑是否正确 0、查看manage.py的指令 python manage.py help 1,在添加了新的 app 之后,我们需要运行下面命令告诉 Django 你的模型做了改变,需要迁移数据库: python manage.py makemigrations books 2,运行下面语句,你可以查看迁移的 sql 语句: python manage.py sqlmigrate polls 0001 3,你可以运行下面命令,来检查数据库是否有问题: python manage.py check 4,运行下面的命令,来创建新添加的模型 python manage.py migrate

安铺靓仔明 07-21 01:43

django3,python manage.py sqlmigrate books 0001 books 是你的应用名称 0001,在执行python manage.py makemigrations books后,books/migration文件夹下有个py文件0001.initial.py

安铺靓仔明 07-21 01:52

django3:在python manage.py makemigrations books后必须执行 python manage.py migrate,不然无法创建数据库表

对这一段的评论会显示在这里

在这个命令行中, books 是app的名称。 和你运行 manage.py startapp 中的一样。执行之后,输出如下:

对这一段的评论会显示在这里
BEGIN;
CREATE TABLE "books_publisher" (
    "id" serial NOT NULL PRIMARY KEY,
    "name" varchar(30) NOT NULL,
    "address" varchar(50) NOT NULL,
    "city" varchar(60) NOT NULL,
    "state_province" varchar(30) NOT NULL,
    "country" varchar(50) NOT NULL,
    "website" varchar(200) NOT NULL
)
;
CREATE TABLE "books_author" (
    "id" serial NOT NULL PRIMARY KEY,
    "first_name" varchar(30) NOT NULL,
    "last_name" varchar(40) NOT NULL,
    "email" varchar(75) NOT NULL
)
;
CREATE TABLE "books_book" (
    "id" serial NOT NULL PRIMARY KEY,
    "title" varchar(100) NOT NULL,
    "publisher_id" integer NOT NULL REFERENCES "books_publisher" ("id") DEFERRABLE INITIALLY DEFERRED,
    "publication_date" date NOT NULL
)
;
CREATE TABLE "books_book_authors" (
    "id" serial NOT NULL PRIMARY KEY,
    "book_id" integer NOT NULL REFERENCES "books_book" ("id") DEFERRABLE INITIALLY DEFERRED,
    "author_id" integer NOT NULL REFERENCES "books_author" ("id") DEFERRABLE INITIALLY DEFERRED,
    UNIQUE ("book_id", "author_id")
)
;
CREATE INDEX "books_book_publisher_id" ON "books_book" ("publisher_id");
COMMIT;
Ken 04-07 05:14

为什么我生成的不一样,多了alter这块 BEGIN; CREATE TABLE `books_publisher` ( `id` integer AUTO_INCREMENT NOT NULL PRIMARY KEY, `name` varchar(30) NOT NULL, `address` varchar(50) NOT NULL, `city` varchar(60) NOT NULL, `state_province` varchar(30) NOT NULL, `country` varchar(50) NOT NULL, `website` varchar(200) NOT NULL ) ; CREATE TABLE `books_author` ( `id` integer AUTO_INCREMENT NOT NULL PRIMARY KEY, `first_name` varchar(30) NOT NULL, `last_name` varchar(40) NOT NULL, `email` varchar(75) NOT NULL ) ; CREATE TABLE `books_book_authors` ( `id` integer AUTO_INCREMENT NOT NULL PRIMARY KEY, `book_id` integer NOT NULL, `author_id` integer NOT NULL, UNIQUE (`book_id`, `author_id`) ) ; ALTER TABLE `books_book_authors` ADD CONSTRAINT `author_id_refs_id_9e7e386` FORE IGN KEY (`author_id`) REFERENCES `books_author` (`id`); CREATE TABLE `books_book` ( `id` integer AUTO_INCREMENT NOT NULL PRIMARY KEY, `title` varchar(100) NOT NULL, `pulisher_id` integer NOT NULL, `publication_date` date NOT NULL ) ; ALTER TABLE `books_book` ADD CONSTRAINT `pulisher_id_refs_id_3a4d8b45` FOREIGN K EY (`pulisher_id`) REFERENCES `books_publisher` (`id`); ALTER TABLE `books_book_authors` ADD CONSTRAINT `book_id_refs_id_30430d9e` FOREI GN KEY (`book_id`) REFERENCES `books_book` (`id`); CREATE INDEX `books_book_58db7374` ON `books_book` (`pulisher_id`); COMMIT;

lei 04-29 14:02

我用的是sqlite3,执行此命令后返回的最后一行如下: self.connection = Database.connect(**kwargs) sqlite3.OperationalError: unable to open database file

lei 04-29 14:51

上面那个是我路径搞错了,不能用'/myapp'而是用'/home/myname/myapp'

lei 04-29 14:53

上面那个是我路径搞错了,不能用'/myapp'而是用'/home/myname/myapp' 但是路径配置正确后sqlall命令没有任何输出。

泥鳅 05-05 14:54

我的也不一样,多生成了一个books.book_authors model

lorchang 11-19 10:00

若是用mysql,要在mysql内预先建立“books”库,并且在settings.py中DATABASES--NAME属性指定“books”库。

xwb1989 12-28 04:43

python manage.py sqlall books之后,输出的结果会瞬间关闭呢...看到来不及看,这是怎么回事呢

gaodayue 01-23 07:57

@Ken 我也是,不过达到的效果是一样到,都是添加外键约束,只是写法不同而已

sammy 03-15 04:34

#----------oracle------------- CREATE TABLE "BOOKS_PUBLISHER" ( "ID" NUMBER(11) NOT NULL PRIMARY KEY, "NAME" NVARCHAR2(30), "ADDRESS" NVARCHAR2(50), "CITY" NVARCHAR2(60), "STATE_PROVINCE" NVARCHAR2(30), "COUNTRY" NVARCHAR2(50), "WEBSITE" NVARCHAR2(100) ) ; DECLARE i INTEGER; BEGIN SELECT COUNT(*) INTO i FROM USER_CATALOG WHERE TABLE_NAME = 'BOOKS_PUBLISHER_SQ' AND TABLE_TYPE = 'SEQUENCE'; IF i = 0 THEN EXECUTE IMMEDIATE 'CREATE SEQUENCE "BOOKS_PUBLISHER_SQ"'; END IF; END; / CREATE OR REPLACE TRIGGER "BOOKS_PUBLISHER_TR" BEFORE INSERT ON "BOOKS_PUBLISHER" FOR EACH ROW WHEN (new."ID" IS NULL) BEGIN SELECT "BOOKS_PUBLISHER_SQ".nextval INTO :new."ID" FROM dual; END; / CREATE TABLE "BOOKS_AUTHOR" ( "ID" NUMBER(11) NOT NULL PRIMARY KEY, "FIRST_NAME" NVARCHAR2(30), "LAST_NAME" NVARCHAR2(40), "EMAIL" NVARCHAR2(100) ) ; DECLARE i INTEGER; BEGIN SELECT COUNT(*) INTO i FROM USER_CATALOG WHERE TABLE_NAME = 'BOOKS_AUTHOR_SQ' AND TABLE_TYPE = 'SEQUENCE'; IF i = 0 THEN EXECUTE IMMEDIATE 'CREATE SEQUENCE "BOOKS_AUTHOR_SQ"'; END IF; END; / CREATE OR REPLACE TRIGGER "BOOKS_AUTHOR_TR" BEFORE INSERT ON "BOOKS_AUTHOR" FOR EACH ROW WHEN (new."ID" IS NULL) BEGIN SELECT "BOOKS_AUTHOR_SQ".nextval INTO :new."ID" FROM dual; END; / CREATE TABLE "BOOKS_BOOK_AUTHORS" ( "ID" NUMBER(11) NOT NULL PRIMARY KEY, "BOOK_ID" NUMBER(11) NOT NULL, "AUTHOR_ID" NUMBER(11) NOT NULL REFERENCES "BOOKS_AUTHOR" ("ID") DEFERRABLE INITIALLY DEFERRED, UNIQUE ("BOOK_ID", "AUTHOR_ID") ) ; DECLARE i INTEGER; BEGIN SELECT COUNT(*) INTO i FROM USER_CATALOG WHERE TABLE_NAME = 'BOOKS_BOOK_AUTHORS_SQ' AND TABLE_TYPE = 'SEQUENCE'; IF i = 0 THEN EXECUTE IMMEDIATE 'CREATE SEQUENCE "BOOKS_BOOK_AUTHORS_SQ"'; END IF; END; / CREATE OR REPLACE TRIGGER "BOOKS_BOOK_AUTHORS_TR" BEFORE INSERT ON "BOOKS_BOOK_AUTHORS" FOR EACH ROW

sharon 05-04 05:39

我用的是mysql,可为什么我执行完数据库里面并没有生成这几个表?请问是怎么回事

jackyzy823 11-04 16:02

我用的是sqlite3,执行完命令后,没任何输出。。什么情况?

lemosa 12-05 13:05

我用的是mysql,django1.4 python manage.py allsql books,命令执行完成后没有在mysql数据库中生成相应的表。手动在mysql中创建books之后,并且将setting.py中讲name 改成books之后,执行也未生成相应的表。

Jerry 12-07 20:45

执行之后没有代码生成的,如果前面的检测都通过的话,那可能是你们的models.py的代码没有保存。我就是这样的问题,保存后执行python.manage.py sqlall books.结果和一楼的一样多了内容。没有显示的祝你们好运!

feng 12-24 07:34

我的mysql没有自动生成表啊,啊啊啊

feng 12-24 07:36

Oh,shit!想知道为什么没有生成表,请继续往下看

sammy 01-10 02:55

MySQL,不自动创建啊。求助~!!!

leiddx 02-20 06:35

sqlall 命令并没有在数据库中真正创建数据表,只是把SQL语句段打印出来,这样你可以看到Django究竟会做些什么。

simons 06-18 03:08

对 如果是mysql 的话需要自己手动建立books库

buglor 08-01 14:37

我执行manage.py sqlall books 的时候报10061的错误呢 你们有遇到没??

李嘉燊 08-09 05:59

基本一致,但倒数第二行有异CREATE INDEX "books_book_publisher_id" ON "books_book" ("publisher_id");我这里显示的却不是books_book_publisher_id而是books_book_81b79144......这个……

lincy 08-15 11:42

总体一样,尾部多了一些行(django 1.5;python 2.7)

leon 09-14 02:30

多了UNIQUE ("book_id", "author_id") 话说这个注释不能换行好蛋疼啊

jwfy 09-21 08:29

如果使用的是mysql的话,确实我们需要提前启动本地的数据库,然后新建一个数据库,再把数据库的名字写到setting里面,这样才会成功的

LCAR_979 12-01 12:36

终于成功了(><) 在目录上结构纠结了半天。原来以为是app不应该在和manage.py同一目录,试着删了app。之后cd进mysite\mysite 在这个目录下startapp 结果报错打消了这个疑惑。最后查出反馈“Are you sure your INSTALLED_APPS setting is correct?”的原因——————models.py没有保存…………说多了都是泪

Lyrus 12-08 09:22

必须在mysql里手动创建相应的数据表,否则会失败

skyler 12-18 06:46

运行没问题,但是为什么我直接打开 mydata.db 里面是空的呢

cy 01-11 15:41

用这命令才是创建表。 python manage.py syncdb

coolws 02-07 11:59

下文提到"sqlall命令并没有在数据库中真正创建数据表,只是把SQL语句段打印出来,这样你可以看到Django究竟会做些什么。 如果你想这么做的话,你可以把那些SQL语句复制到你的数据库客户端执行,或者通过Unix管道直接进行操作或者syncdb命令"。 请大家不要着急= =

DaiDai 02-10 15:50

我去。。。这里明显误导人呀,应该再往下看一点点。。。明明mysql会自动alter table,这里却自动把这几句重要的删了,不一样也别急的说。。

yoncan 08-13 03:11

生成的语句中包含了双引号"" , 但是在mysql中执行是出错的, 请问怎么修改??

www 03-04 03:11

books_book_authors这个表里的author_id字段被设置成int类型合适么? 如果一本书有两个作者的话这个字段的内容会是什么? 我在后台给一本书设置两个作者的时候出现错误提示的应该是类型错误,不知道是不是这个地方的问题

django1.8 06-15 08:35

python manage.py makemigrations,这个是生成sql代码,然后再用python manage.py migrate 就可以了,自动成生表。我的数据库是mariadb5.6

xiaowai 07-09 07:53

CommandError: App 'books' has migrations. Only the sqlmigrate and sqlflush commands can be used when an app has migrations. 我这里需要先把startapp时自动生成的migration目录删除了才能生成sql

Liao 08-06 09:36

@xiaowei 不要运行python manage.py sqlall books这个命令,我的Django 1.8,mysql5.5.结果出现了这个异常CommandError: APP'books' has migrations .Only the sqkmigrate and sqlflush commands can be used when an app has migrations,看之前的评论得到了解决,分别执行python manage.py makemigrations books python manage.py sqlmigrate books 0001 python manage.py migrate这三个命令之后就好了

look1z 03-21 07:05

mysql 要先建库,设置改好,然后输python manage.py makemigrations app名 才行

king 01-21 07:16

mysql 5.7依次执行这三个命令,ok了,自动生成表 python manage.py makemigrations books python manage.py sqlmigrate books 0001 python manage.py migrate

くく 04-28 08:23

这是因为旧版本和新的版本命令已经不一样 的问题。 我用的是django =1.8.3, 写好自己的model以后可以换成这样的命令来生成数据库表: python manage.py makemigrations books 然后:python manage.py sqlmigrate books 0001 这样就可以CREATE TABLE 了。

mzfly 12-28 11:10

mysql会生成这些表: +----------------------------+ | Tables_in_mydb01 | +----------------------------+ | auth_group | | auth_group_permissions | | auth_permission | | auth_user | | auth_user_groups | | auth_user_user_permissions | | books_author | | books_book | | books_book_authors | | books_publisher | | django_admin_log | | django_content_type | | django_migrations | | django_session | | t_one | +----------------------------+ 15 rows in set (0.00 sec)

mzfly 12-28 11:13

mysql需要执行数据库迁移: python manage.py makemigrations python manage.py migrate

对这一段的评论会显示在这里

注意:

对这一段的评论会显示在这里
  • 自动生成的表名是app名称( books )和模型的小写名称 ( publisher , book , author )的组合。你可以参考附录B重写这个规则。
  • 我们前面已经提到,Django为每个表格自动添加加了一个 id 主键, 你可以重新设置它。
  • 按约定,Django添加 "_id" 后缀到外键字段名。 你猜对了,这个同样是可以自定义的。
  • 外键是用 REFERENCES 语句明确定义的。
  • 这些 CREATE TABLE 语句会根据你的数据库而作调整,这样象数据库特定的一些字段例如:(MySQL),auto_increment(PostgreSQL),serial(SQLite),都会自动生成。integer primary key 同样的,字段名称也是自动处理(例如单引号还好是双引号)。 例子中的输出是基于PostgreSQL语法的。
C.J. 06-15 07:00

(例如单引号还好是双引号)应该是(例如单引号还是双引号)?

phoenix 07-05 15:15

(MySQL),auto_increment(PostgreSQL),serial(SQLite),都会自动生成。integer primary key 应为 auto_increment(MySQL),serial(PostgreSQL),integer primary key(SQLite),都会自动生成

zjb 01-09 09:03

这里的自定义 到底是怎么个自定义法呀

nksfreedom 12-17 12:27

逗号的位置有问题。auto_increment是mysql,serial是postgresql

桔了个仔 02-12 14:16

的确猜对了!但是你要告诉我怎么定义啊!

侯克亮 05-19 13:09

我也纠结呢,到底如何定义

Chris 06-19 08:19

auto_increment (MySQL), serial (PostgreSQL), 或 integer primary key (SQLite) 這樣才是對的

lincy 08-15 11:43

莫急,后面应该有

lincy 08-15 11:49

说好的以MySQL为例呢?!

Lyrus 12-08 09:25

我还纳闷mysql里有serial这个关键字么

jstech 07-11 09:23

class channel(models.Model): devid = models.ForeignKey(device,db_column='devid');# 设备id

对这一段的评论会显示在这里

sqlall 命令并没有在数据库中真正创建数据表,只是把SQL语句段打印出来,这样你可以看到Django究竟会做些什么。 如果你想这么做的话,你可以把那些SQL语句复制到你的数据库客户端执行,或者通过Unix管道直接进行操作(例如,python manager.py sqlall books | psql mydb )。不过,Django提供了一种更为简易的提交SQL语句至数据库的方法: syncdb 命令

对这一段的评论会显示在这里
python manage.py syncdb
i4box 04-24 11:37

报“Your models have changes that are not yet reflected in a migration, and so won't be applied.” 需要先执行“python manage.py makemigrations”

Jeff 09-20 02:37

新版本已将 syncdb 改为 migrate, syncdb将在未来的版本(1.9)中移除

console 10-21 08:19

谢谢楼上

Interesting 03-18 15:00

新版本使用 python manage.py migrate,详情请参见这里https://docs.djangoproject.com/en/dev/intro/tutorial01/

MO 10-03 07:40

先 python manage.py makemigrations 再 python manage.py syncdb 不然下面运行p1.save()报错 no such table:books_publisher (亲试,python 2.7 django 1.8.4)

Alien 02-19 17:11

1.7之後的版本指令有以下變動 先 python manage.py makemigrations (APP_NAME) #(APP_NAME)沒填則默認對所有APP進行makemigrations 再 python manage.py migrate

匿名读者 09-06 01:13

1.7版本以上会限制性 python manage.py makemigrations 查看模块的变化 然后在执行 python manage.py migrate 同步这些变化至数据库

匿名读者 09-11 08:59

django1.9.9 已经没有syncdb了

Tommy 08-09 09:42

python manage.py makemigrations python manage.py migrate 搞定 1.10版本

猪头哥哥 12-01 05:24

1.11里面的用法: python manage.py makemigrations myproject python manage.py migrate myproject

猪头哥哥 01-09 02:30

纠正楼上 不需要myproject 各位

对这一段的评论会显示在这里

执行这个命令后,将看到类似以下的内容:

对这一段的评论会显示在这里
Creating table books_publisher
Creating table books_author
Creating table books_book
Installing index for books.Book model
chen.yuehua 07-28 14:26

这里还会生成一个中间表books_book_authors

July75 01-30 05:27

顶LZ,books_book_authors也会产生的,是因为book类与Author类是多对多关系,我觉得这个是Django ORM和普通操作SQL数据库很明显的特点,希望能增加进去。

ode2free 04-09 06:32

回一楼,version 1.2.5 已经显示 books.Book_authors model

sillyousu 11-04 18:07

Creating tables ... Creating table books_publisher Creating table books_author Creating table books_book_authors Creating table books_book Installing custom SQL ... Installing indexes ... No fixtures found. ============================== 还没有搞懂 fixtures 是什么 我用的是 sqlite3

juanjuan 07-16 07:08

执行syncdb,提示no fixtures,用的是mysql;

kk 07-17 07:20

authors是因为使用了auth模块。后台登录管理用的。

Crazykoo 09-24 08:31

Creating tables... Installing custom SQL... Installing indexes... Installed 0 object(s)from no fixture(s) --------------------------------------------------不知道之前哪里出错了。执行syncdb的时候提示这个错误

Crazykoo 09-24 08:32

PS.我用的是sqlite。不知道为啥里面是SQL

Larry 10-14 14:28

这是完整的。 BEGIN; CREATE TABLE `books_publisher` ( `id` integer AUTO_INCREMENT NOT NULL PRIMARY KEY, `name` varchar(30) NOT NULL, `address` varchar(50) NOT NULL, `city` varchar(60) NOT NULL, `state_province` varchar(30) NOT NULL, `country` varchar(50) NOT NULL, `website` varchar(200) NOT NULL ) ; CREATE TABLE `books_author` ( `id` integer AUTO_INCREMENT NOT NULL PRIMARY KEY, `first_name` varchar(30) NOT NULL, `last_name` varchar(40) NOT NULL, `email` varchar(75) NOT NULL ) ; CREATE TABLE `books_book_authors` ( `id` integer AUTO_INCREMENT NOT NULL PRIMARY KEY, `book_id` integer NOT NULL, `author_id` integer NOT NULL, UNIQUE (`book_id`, `author_id`) ) ; ALTER TABLE `books_book_authors` ADD CONSTRAINT `author_id_refs_id_9e7e386` FOREIGN KEY (`author_id`) REFERENCES `books_author` (`id`); CREATE TABLE `books_book` ( `id` integer AUTO_INCREMENT NOT NULL PRIMARY KEY, `title` varchar(100) NOT NULL, `publisher_id` integer NOT NULL, `publication_date` date NOT NULL ) ; ALTER TABLE `books_book` ADD CONSTRAINT `publisher_id_refs_id_3a4d8b45` FOREIGN KEY (`publisher_id`) REFERENCES `books_publisher` (`id`); ALTER TABLE `books_book_authors` ADD CONSTRAINT `book_id_refs_id_30430d9e` FOREIGN KEY (`book_id`) REFERENCES `books_book` (`id`); CREATE INDEX `books_book_22dd9c39` ON `books_book` (`publisher_id`); COMMIT;

zjclost 02-02 08:05

no fixtures found指的是数据库没有初始化数据,是空的。

yao.lu 08-29 02:22

运行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 ... Failed to install index for books.Book_authors model: (1, "Can't create/write to file '/tmp/ibEYvdfV' (Errcode: 2)") Failed to install index for books.Book model: (1, "Can't create/write to file '/ tmp/ibDVHHuY' (Errcode: 2)") Installed 0 object(s) from 0 fixture(s) Python版本:2.7.5;Django版本:1.5.2; 数据库:MySQL on a remote Linux server

yao.lu 08-30 06:30

解决上面的问题:http://blog.sina.com.cn/s/blog_9ffcd5dc01017wyz.html

lalala23456 10-10 02:42

使用的是PostgreSQL9.2.1,执行完后,最后提示Installed 0 object(s) from 0 fixture(s)。这个是正确还是错误呀?我切换到postgres用户下,psql进去查询了以下,select * from books_book_authors;是由这个表的。

tyroger 10-13 17:16

Django1.5生成好多表: Creating tables ... Creating table auth_permission Creating table auth_group_permissions Creating table auth_group Creating table auth_user_groups Creating table auth_user_user_permissions Creating table auth_user Creating table django_content_type Creating table django_session Creating table django_site Creating table books_publisher Creating table books_author Creating table books_book_authors Creating table books_book You just installed Django's auth system, which means you don't have any superusers defined. Would you like to create one now? (yes/no): yes Username (leave blank to use 'administrator'): admin Email address: tyroger@163.com Password: Password (again): Superuser created successfully. Installing custom SQL ... Installing indexes ... Installed 0 object(s) from 0 fixture(s)

Harry 11-23 15:17

执行完 $ python manage.py syncdb 后,会出现以下内容: Creating tables ... Installing custom SQL ... Installing indexes ... Installed 0 object(s) from 0 fixture(s) 数据库是 sqlite3

LCAR_979 12-01 12:46

同Harry 楼上有人说是没有初始化? 那么应该怎么处理?求解释

Lyrus 12-08 09:34

在Mysql里查看一下 相应的表和表段已经创建好了 syncdb应该只会更新新添加的表段

cy 01-11 15:27

我的出错。。。不知道原因,求解,感激。 D:\Dropbox\cyproject>python manage.py syncdb Creating tables ... Creating table django_admin_log Traceback (most recent call last): File "manage.py", line 10, in <module> execute_from_command_line(sys.argv) File "e:\python27\lib\site-packages\django\core\management\__init__.py", line 399, in execute_from_command_line utility.execute() File "e:\python27\lib\site-packages\django\core\management\__init__.py", line 392, in execute self.fetch_command(subcommand).run_from_argv(self.argv) File "e:\python27\lib\site-packages\django\core\management\base.py", line 242, in run_from_argv self.execute(*args, **options.__dict__) File "e:\python27\lib\site-packages\django\core\management\base.py", line 285, in execute output = self.handle(*args, **options) File "e:\python27\lib\site-packages\django\core\management\base.py", line 415, in handle return self.handle_noargs(**options) File "e:\python27\lib\site-packages\django\core\management\commands\syncdb.py" , line 107, in handle_noargs cursor.execute(statement) File "e:\python27\lib\site-packages\django\db\backends\util.py", line 69, in e xecute return super(CursorDebugWrapper, self).execute(sql, params) File "e:\python27\lib\site-packages\django\db\backends\util.py", line 53, in e xecute return self.cursor.execute(sql, params) File "e:\python27\lib\site-packages\django\db\utils.py", line 99, in __exit__ six.reraise(dj_exc_type, dj_exc_value, traceback) File "e:\python27\lib\site-packages\django\db\backends\util.py", line 51, in e xecute return self.cursor.execute(sql) File "e:\python27\lib\site-packages\django\db\backends\mysql\base.py", line 12 4, in execute return self.cursor.execute(query, args) File "e:\python27\lib\site-packages\MySQLdb\cursors.py", line 205, in execute self.errorhandler(self, exc, value) File "e:\python27\lib\site-packages\MySQLdb\connections.py", line 36, in defau lterrorhandler raise errorclass, erro

cy 01-11 15:37

终于折腾好了,换了一个数据库,linux: 可是多了一些东西: D:\Dropbox\cyproject>python manage.py syncdb Creating tables ... Creating table django_admin_log Creating table auth_permission Creating table auth_group_permissions Creating table auth_group Creating table auth_user_groups Creating table auth_user_user_permissions Creating table auth_user Creating table django_content_type Creating table django_session Creating table booksapp_publisher Creating table booksapp_author Creating table booksapp_book_authors Creating table booksapp_book You just installed Django's auth system, which means you don't have any superuse rs defined. Would you like to create one now? (yes/no): y Please enter either "yes" or "no": yes Username (leave blank to use 'administrator'): Email address: xwing@qq.com Password: Password (again): Superuser created successfully. Installing custom SQL ... Installing indexes ... Installed 0 object(s) from 0 fixture(s) D:\Dropbox\cyproject>

Young 05-12 02:24

MySQL :使用python manage.py syncdb 后出现 installed 0 objects from 0 fixtures。但是查看数据库,里面的表和字段都有了。

qyhu 06-27 01:50

请问这里新建的表是在哪个数据库里啊,数据库名就是books么?

Rying 01-08 14:30

Operations to perform: Apply all migrations: books Running migrations: Applying books.0001_initial... OK

天空与大海 04-28 00:04

显示: /Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/Django-1.8-py3.5.egg/django/core/management/commands/syncdb.py:24: RemovedInDjango19Warning: The syncdb command will be removed in Django 1.9 warnings.warn("The syncdb command will be removed in Django 1.9", RemovedInDjango19Warning) Operations to perform: Apply all migrations: books Running migrations: No migrations to apply. 之后看了数据库确实所table都建好了

对这一段的评论会显示在这里

syncdb 命令是同步你的模型到数据库的一个简单方法。 它会根据 INSTALLED_APPS 里设置的app来检查数据库, 如果表不存在,它就会创建它。 需要注意的是, syncdb不能将模型的修改或删除同步到数据库;如果你修改或删除了一个模型,并想把它提交到数据库,syncdb并不会做出任何处理。 (更多内容请查看本章最后的“修改数据库的架构”一段。)

卢一鸣 08-25 11:25

在本章的最后,并没有“修改数据库的架构”这部分内容

在本章的最后,并没有“修改数据库的架构”这部分内容 10-23 03:54

在本章的最后,并没有“修改数据库的架构”这部分内容在本章的最后,并没有“修改数据库的架构”这部分内容在本章的最后,并没有“修改数据库的架构”这部分内容在本章的最后,并没有“修改数据库的架构”这部分内容在本章的最后,并没有“修改数据库的架构”这部分内容在本章的最后,并没有“修改数据库的架构”这部分内容在本章的最后,并没有“修改数据库的架构”这部分内容在本章的最后,并没有“修改数据库的架构”这部分内容在本章的最后,并没有“修改数据库的架构”这部分内容在本章的最后,并没有“修改数据库的架构”这部分内容在本章的最后,并没有“修改数据库的架构”这部分内容在本章的最后,并没有“修改数据库的架构”这部分内容在本章的最后,并没有“修改数据库的架构”这部分内容

张君祥 01-17 16:14

安装south组件可实现同步数据库架构变更

ipython 05-05 12:32

在本章的最后,并没有“修改数据库的架构”这部分内容

xfan 05-28 06:35

修改数据库架构呢?对模型的修改是不是可以直接同步到数据库中,下一章改变blank=True的时候好像是这样子的,

lincy 08-15 11:54

我去,别坑啊

huangtc 11-21 04:32

“修改数据库的架构”: http://django-notes.blogspot.com/2011/07/making-changes-to-database-schema.html

skyler 12-18 07:12

突然发现有个关键字 拼写错误...现在再修改models 是不是没用了

xavier 07-19 04:10

感觉很麻烦这样做

Mavericks 07-30 11:47

写错了个列表标签,费劲找到db.sqllite3数据库文件去修改= = south怎么安哪?

django1.8 06-15 08:36

1.8好像可以自己修改表了python manage.py migrate

Vincent 10-04 09:10

django 1.10.1版本 python manage.py makemigrations books python manage.py migrate 亲测有效。可以看到文件夹migrations里有了0002 里面有修改后的

zhangxc 03-17 07:00

HINT: MySQL's Strict Mode fixes many data integrity problems in MySQL, such as data truncation upon insertion, by escalating warnings into errors. It is strongly recommended you activate it. See: https://docs.djangoproject.com/en/1.10/ref/databases/#mysql-sql-mode setting中追加 'OPTIONS': { 'init_command' : "SET sql_mode='STRICT_TRANS_TABLES'", }

对这一段的评论会显示在这里

如果你再次运行 python manage.py syncdb ,什么也没发生,因为你没有添加新的模型或者 添加新的app。因此,运行python manage.py syncdb总是安全的,因为它不会重复执行SQL语句。

对这一段的评论会显示在这里

如果你有兴趣,花点时间用你的SQL客户端登录进数据库服务器看看刚才Django创建的数据表。 你可以手动启动命令行客户端(例如,执行PostgreSQL的psql 命令),也可以执行 python manage.py dbshell ,这个命令将依据DATABASE_SERVER 的里设置自动检测使用哪种命令行客户端。 常言说,后来者居上。

args 04-30 03:37

ode2free 04-09 17:36

manage.py dbshell 运行不了,django 1.2.5 db=sqlite3

tonylifei 06-04 08:57

如果 python manage.py dbshell 运行时提示 sqlite3 不是有效的内部命令*** , 解决方法是下载一个SQLite3的C语言类库. windows 下可以下载 Precompiled Binaries For Windows (sqlite-shell-win32-x86-3070500.zip), 解压缩后是sqlite3.exe。 然后将sqlite3.exe所在的路径加到系统环境变量里面去(或者偷懒将sqlite3.exe 放到你安装的python的文件夹下)

项超 02-09 08:38

db = sqlite3 运行 python manage.py dbshell 提示我没有安装sqlite3或者是没有添加到path。我连sqlite3安装在哪里都不知道,怎么添加sqlite3到path啊?

melzg 03-21 13:31

常言说,后来者居上。---> 这句话有些没头没脑。应该是数据库设置中,在最后面的设置会起效果的意思吧。

Zossin 05-19 16:48

"常言说,后来者居上"似应为“一般来说,后安装的数据库管理系统优先”

YangNas 08-11 11:01

下面的“基本数据访问”,看不懂了,为什么我输入python manage.py shell进入python shell查看,却看不到Publisher类的name属性呢?

askingyj 08-15 06:55

"python manager.py shell"后,查看sys.path中的值,发现path中将第一个mysite的添加了进去,而根据上面的步骤,books貌似是建立在mysite\mysite\中的,所以是否需要这里导入Publisher: from mysite.books.models import Publisher呢?

小菜鸟 09-29 03:39

为什么运行完后,MYSQL中没有新增表不成功

匿名读者 03-11 14:37

后来者居上,前浪死在沙滩上 ,应该是说 python manage.py dbshell 这个进终端方法比较优秀,有前途 ^_^

hsia 06-13 06:47

运行 python manage.py dbshell 出现这个KeyError: 'DATABASE_OPTIONS'是为什么?

Faye euler 06-28 09:23

'mysql' 不是内部或外部命令,也不是可运行的程序 或批处理文件。 这是什么原因呢?

zzm88 07-22 06:24

The latter is almost always more convenient. 是两种方法中,后者(manage.py dbshell)总是较为方便 后来者居上。。。汗-_-

huangtc 11-21 04:36

至少这样不需要输入密码了 :)

Lyrus 12-08 09:40

@Faye euler 应该是没有添加环境变量的原因

skyler 12-18 07:02

好吧,我直接找到源文件双击...

杨大眼 01-22 06:25

mysql: unknown variable 'init-command=SET' 求解

dd 12-09 17:19

mark

匿名读者 09-06 03:15

为什么运行完后,MYSQL中没有新增表不成功

对这一段的评论会显示在这里

基本数据访问

sallen 03-12 09:28

为什么我import的时候显示不存在?Publisher

sallen 03-12 09:33

搞定了,原来路径不对,生成的books目录在子目录中

对这一段的评论会显示在这里

一旦你创建了模型,Django自动为这些模型提供了高级的Python API。 运行 python manage.py shell 并输入下面的内容试试看:

对这一段的评论会显示在这里
>>> 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()
>>> p2 = Publisher(name="O'Reilly", address='10 Fawcett St.',
...     city='Cambridge', state_province='MA', country='U.S.A.',
...     website='http://www.oreilly.com/')
>>> p2.save()
>>> publisher_list = Publisher.objects.all()
>>> publisher_list
[<Publisher: Publisher object>, <Publisher: Publisher object>]
dc 12-10 12:17

这里的books.models应该是mysite.books.models吧,否则导入不进去

xhc 12-13 05:07

是的 必须import mysite.books.**

Liudroid 03-24 11:37

我直接用books.models也可以

Andy 04-15 03:28

如果把books放到mysite內,就要用mysite.books才能正常

s 04-25 09:53

额 大家都看出来了 没写清楚呀

qq_345421243 05-10 03:19

如果不想输入python manage.py shell而是直接双击某个文件(把这 段代码拷贝到该文件)中直接保存到数据库怎么执行呢

qq_345421243 05-10 03:38

如果不想输入python manage.py shell而是直接双击某个文件(把这 段代码拷贝到该文件)中直接保存到数据库怎么执行呢 经测试在你的.py文件前面加上这两句即可(这两句代码拷贝自manage.py) import os,sys os.environ.setdefault("DJANGO_SETTINGS_MODULE", "mysite.settings")

simons 06-18 03:54

p1.save() 报错: no database selected

MingjunYang 08-21 12:40

表示使用PyDev相对来说比较方便。

Harry 11-23 15:54

>>> from books.models import Publisher Traceback (most recent call last): File "<console>", line 1, in <module> ImportError: cannot import name Publisher 请问此处应该怎么解决? Mac OS10.9,数据库是 sqlite3 ,Python 2.7.5 , Django 1.5.4

Harry 12-02 08:38

p1.save() 报错, File "<console>", line 4 ,p1.save(), SyntaxError: invalid syntax ,是什么情况?

Harry 12-02 08:42

问题解决了,原来还有一个 ) 忘记输入了。

Zippo 12-13 06:20

这里的books.models应该是mysite.books.models吧,否则导入不进去 === 看manage.py和books的具体路径了

box 01-15 14:21

楼上正解,在最底层mysite建立的app需要这样导入

匿名读者 03-09 15:54

为什么我会出现django.db.utils.ProgrammingError: (1146, 表不存在这样的错误呢。 已经用 python manage.py syncdb 创建表了呀

匿名读者 06-25 08:57

这里的books.models应该是mysite.books.models吧,否则导入不进去 === 看manage.py和books的具体路径了

stevenlee87 06-25 08:57

这里的books.models应该是mysite.books.models吧,否则导入不进去 === 看manage.py和books的具体路径了

mihello 08-04 03:55

这个看你的具体路径

蒋川 11-01 03:51

这里import Publisher,这个Publisher类是从哪来地,没记得创建过这个类啊,数据里面创建地不是books_publisher吗,这个P是小写,要是import publisher(小写)就会报错,没这个类,最后我访问我地数据库,这确实是存在books_publisher里面的,就是不知道这个类从哪来地。

蒋川 11-01 03:53

噢,我刚刚看到了,原来是一开始就在model里面定义的类。

大的菠萝 03-01 14:38

p1.save() 报错 django.db.utils.ProgrammingError:(1064,"You have an error in your SQL syntax;check the manual that corresponds to your MySQL server version for the right syntax to use near '%s,%s,%s,%s,%s,%s)' at line 1") 找了好久,没发现语法错误啊 python3.4.1 + Django1.7 + mysql5.1.73

大的菠萝 03-02 09:28

分析应该是MySQLdb不兼容python3.x的缘故,更换了PyMySQL,问题解决 在 Django 站点的 __init__.py 文件中添加如下两行: importpymysql pymysql.install_as_MySQLdb() 这里也要改一下: DATABASES={ 'default':{ ...... 'PORT':'', 'OPTIONS':{ 'autocommit':True, }, } }

ly 11-05 02:06

使用xxx.py脚本方式运行(不通过shell命令方式),以下代码在Django 1.8.4版本下测试通过: # coding: UTF-8 # 在manage.py同级目录下建立一个XXX.py文件 import os import django os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'myproject.settings') # 设置环境变量,myproject为工程名 django.setup() # 导入数据 # 实例:在Publisher下插入一条记录 from books.models import Publisher p1 = Publisher(name='Test', address='address', city='beijing', state_province='Beijing', country='china.', website='http://www.apress.com/') p1.save()

WN 02-25 08:46

我的books是和manage.py在同一级的,写books.models正确,加了mysite之后出错,django版本1.7.11,py版本2.7.9

later 03-02 07:45

django.core.exceptions.AppRegistryNotReady: Apps aren't loaded yet. import django django.setup()

大隐 08-20 17:11

使用xxx.py脚本方式运行(不通过shell命令方式),以下代码在Django 1.8.4版本下测试通过: # coding: UTF-8 # 在manage.py同级目录下建立一个XXX.py文件 import os import django os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'myproject.settings') # 设置环境变量,myproject为工程名 django.setup() # 导入数据 # 实例:在Publisher下插入一条记录 from books.models import Publisher p1 = Publisher(name='Test', address='address', city='beijing', state_province='Beijing', country='china.', website='http://www.apress.com/') p1.save() 新来的注意,这个方式是正确的,测试通过

对这一段的评论会显示在这里

这短短几行代码干了不少的事。 这里简单的说一下:

对这一段的评论会显示在这里
  • 首先,导入Publisher模型类, 通过这个类我们可以与包含 出版社 的数据表进行交互。
  • 接着,创建一个Publisher 类的实例并设置了字段name, address 等的值。
  • 调用该对象的 save() 方法,将对象保存到数据库中。 Django 会在后台执行一条 INSERT 语句。
  • 最后,使用Publisher.objects 属性从数据库取出出版商的信息,这个属性可以认为是包含出版商的记录集。 这个属性有许多方法, 这里先介绍调用Publisher.objects.all() 方法获取数据库中Publisher 类的所有对象。这个操作的幕后,Django执行了一条SQL SELECT 语句。
对这一段的评论会显示在这里

这里有一个值得注意的地方,在这个例子可能并未清晰地展示。 当你使用Django modle API创建对象时Django并未将对象保存至数据库内,除非你调用save() 方法:

phoenix 07-05 15:54

Django modle API应为Django model API

唐琪 05-05 08:53

未保存数据是和mysql中必须是运行conn.commit()才能真正提交一个道理吗?

对这一段的评论会显示在这里
p1 = Publisher(...)
# At this point, p1 is not saved to the database yet!
p1.save()
# Now it is.
Jhon 09-19 02:58

such a wonderful book

such an amazing book 02-01 03:45

猪头哥哥 12-01 05:43

such a useful book

Asterism2012 06-27 00:37

such a splendid wonderful book.

对这一段的评论会显示在这里

如果需要一步完成对象的创建与存储至数据库,就使用objects.create() 方法。 下面的例子与之前的例子等价:

对这一段的评论会显示在这里
>>> p1 = Publisher.objects.create(name='Apress',
...     address='2855 Telegraph Avenue',
...     city='Berkeley', state_province='CA', country='U.S.A.',
...     website='http://www.apress.com/')
>>> p2 = Publisher.objects.create(name="O'Reilly",
...     address='10 Fawcett St.', city='Cambridge',
...     state_province='MA', country='U.S.A.',
...     website='http://www.oreilly.com/')
>>> publisher_list = Publisher.objects.all()
>>> publisher_list
zeroten 09-10 04:15

怎么直接在项目中使用这些语句,不可能总写在命令行里

猪头哥哥 12-01 05:44

这些点只会在命令行出现 为了续上一行 项目中正常写就好

对这一段的评论会显示在这里

当然,你肯定想执行更多的Django数据库API试试看,不过,还是让我们先解决一点烦人的小问题。

对这一段的评论会显示在这里

添加模块的字符串表现

对这一段的评论会显示在这里

当我们打印整个publisher列表时,我们没有得到想要的有用信息,无法把](#id9)[对象区分开来:

对这一段的评论会显示在这里

Inline literal start-string without end-string.

对这一段的评论会显示在这里

Inline literal start-string without end-string.

ode2free 04-09 08:49

应该是:无法区分不同的Publisher实例对象

lu4nx 05-28 07:55

publisher列表??是publisher_list吧?

Scar_L 07-23 01:06

后面的````是什么??

sapjax 07-26 02:39

When we printed out the list of publishers, all we got was this unhelpful display that makes it difficult to tell the Publisher objects apart: @Scar_L ```部分是Publisher,意思是打印出来的信息一样,没法区分两个实例

jason 08-23 06:44

是说[<Publisher: Publisher object>, <Publisher: Publisher object>]这俩个无法区分

HACK21 03-06 10:55

我想知道,它为什么要区分对象?只要显示就好了,难道还要进行类似的比较?

sitin 06-05 09:03

同上问题?

lincy 08-15 12:13

下面这几行是什么??为什么时不时就来一下

mywjch 11-20 06:06

回LS,这是出错了,应该是这里的源文件有误吧,翻译时没有按照标准,或这里没有审核好。

xavier 07-19 04:27

这一段已过时,建议看英文版

对这一段的评论会显示在这里
[<Publisher: Publisher object>, <Publisher: Publisher object>]
Lapalaca 09-24 05:21

now it is:<QuerySet [<Publisher: Publisher object>, <Publisher: Publisher object>]>

对这一段的评论会显示在这里

我们可以简单解决这个问题,只需要为Publisher 对象添加一个方法 __unicode__()__unicode__() 方法告诉Python如何将对象以unicode的方式显示出来。 为以上三个模型添加__unicode__()方法后,就可以看到效果了:

吴振伟@thu 09-13 01:27

类似于java中Object类的toString()方法。

Hillfree 04-22 14:52

py3.x中 __unicode__()没了,改成了__str__()

sitin 06-05 09:10

我也发现我下的pdf英文版为__str__但是http://www.djangobook.com/en/2.0/chapter05.html依然为__unicode__

Bruno 11-19 07:56

怎么类似与Java的toString函数,每个类里面都有这个函数,要想区别的话还得重写这个函数

Python 3 中为 __str__() 12-23 07:21

Python 3 中为 __str__() Python 2 中为 __unicode__()

对这一段的评论会显示在这里
from django.db import models

class Publisher(models.Model):
    name = models.CharField(max_length=30)
    address = models.CharField(max_length=50)
    city = models.CharField(max_length=60)
    state_province = models.CharField(max_length=30)
    country = models.CharField(max_length=50)
    website = models.URLField()

    **def __unicode__(self):**
        **return self.name**

class Author(models.Model):
    first_name = models.CharField(max_length=30)
    last_name = models.CharField(max_length=40)
    email = models.EmailField()

    **def __unicode__(self):**
        **return u'%s %s' % (self.first_name, self.last_name)**

class Book(models.Model):
    title = models.CharField(max_length=100)
    authors = models.ManyToManyField(Author)
    publisher = models.ForeignKey(Publisher)
    publication_date = models.DateField()

    **def __unicode__(self):**
        **return self.title**
skygu 02-03 11:15

应该不是排版,是作者故意留下的,用来区分新添加的代码吧,上一个版本也是这样的

风间星魂 06-28 03:11

这段代码排版有点问题,用的是不提倡的空格缩进,用户测试的时候添加新方法往往用的tab缩进,很容易导致出错~

image72 08-09 21:05

**def __unicode__(self):** **return self.name** 害我找半天啊, 干嘛不把 * 换成 + ,至少这个可以表示是增加的

ode2free 04-09 09:03

@风间星魂, 不是提倡空格缩进吗?为了避免不同系统tab所代表的缩进并不相同 p.s. 英文版并没有 ** 标记,只是加重字体

yuxc 04-15 01:51

**怎么不去掉呢。。。误导我了。。。。

泥鳅 05-05 15:14

我也被误导了,还以为我python语法记错了

wonder 05-22 01:37

很多RST标记用错了吧? **text** 用于强调的标记用在预编辑的代码块里不起作用的吧? 还有``text``标记, 很多地方搞成了 `` text``(里面多了个空格), 结果原样生成了.

wonder 05-22 01:44

是不是该认为 RST 语法局限性太大呢? 如果又想实现预编辑(排版)效果,又想使用一些rst标记在其中呢?

tonylifei 06-04 09:03

也就是说这段代码里不要跟着输入 " *** " 这样的字符?

tonylifei 06-04 09:04

在 books 文件夹下的 models.py 内改写如下代码

imlyj 07-27 10:28

我加del _unicode_(self) return self.name 退出重启,直接报错呀。为什么呀

soul_eater 08-31 09:15

回imlyj :单“_”改成 双“__”

gss 08-31 13:16

**就是误导人啊,加上说明最好

au9ustine 08-31 16:39

1. def部分的**应该去掉啊 2. def与class内变量声明间的indent貌似有问题,莫非一定要用空格填补?

AlsoTang 12-13 07:09

**(两个星号)在MarkDown语法里面表示强调,渲染成html之后应该为<strong></strong>的。这里没有渲染成功。

cadl 05-20 12:32

**应该是markdown的强调吧

sapjax 07-26 02:42

**是markdown加粗的,英文版渲染成功了的,中文版可能哪里搞错了

Zero 10-27 13:21

强烈建议删掉'**', 可以用高亮代替。

erhuabushuo 11-10 08:21

为兼容Python3, 在1.5版本后。 请也定义 __str__ 然返回对象字符串表示

jack 01-03 10:10

凡是加上方法重新进入报错的同学,请注意他这个模型之前的缩进,都是用的4个空格,如果你在添加下面方法是用的是tab,那就会报错了,改成4个空格就不会报错了

mrwang1992 01-15 16:15

我还以为 就我被坑了 好嘛 路过共勉

UFO 01-17 02:23

当读者都愤慨的时候就已经说明了**的存在是多么的邪恶。作者写这个的价值全无,反而留下无穷的负面影响。为什么还不去掉?

Sheriaty 01-28 02:57

楼上的真是的,人家好心翻译在这里没时间这么久了没维护能不能客气点理解下?你觉得代码有问题你自己去看英文版的代码啊。真不知道你指的是哪个作者,要是原作者,根本就没**,要是指译者,你这G点也太低了。

maze 02-24 02:22

英文版的def部分没有缩进,缩进后编译就出错了

匿名读者 03-11 14:58

不用缩进,也不用激动。只要把这段代码复制下来,然后把**全部替换成无,就可以使用了。经过这些小bug,理解可以更深入 ^-^

athos 03-11 14:59

上面是俺说滴 :)

mihello 03-25 03:38

哈哈,我是中英对照看,就无这个** 问题了。

zhengyl 04-28 02:03

__unicode__方法就类似于Java对象的toString()

Kun 05-26 08:07

这里错误有两个情况,第一个**其实是没有必要的,直接去掉,第二个是,如果按照习惯用TAB来缩进,那么在class里面所有的便面的缩进也得修改,直接复制到程序里面是4个空格符,因此这里会出错

Kevin 06-18 02:09

1. 函数前面的,**def 的 “**”是多余的,请去掉。 2. 我意外google到了“python函数中定义参数的四种方式”,这个是我之前没有接触过的,分享一下。

Kevin 06-18 02:23

对了,翻译者 添加了 **,这是为了来标记,这是新增的代码,以示区分。总是copy代码,在一开始学习的时候,不好。

Angus 07-12 07:33

顶楼上的,不是直接copy代码的话,**的用意还是很明显的不是吗?

K 07-12 23:28

虽说能看出来这个邪恶的星号是干啥用的,但这里英文原版用的是高亮诶,为啥中文版的不用高亮?

nwahlk 07-24 09:45

看评注真有用!

francis 08-05 11:09

**def __unicode__(self):** **return self.name** 要把**去掉才行吧?我把所有**去掉了,运行才正常。

李嘉燊 08-09 06:40

星号是肯定要去掉的,大家在看的过程中要是有什么疑问大可以去原文那里对照一下,没必要对劳苦功高的译者吹毛求疵。原文只是加粗了这段代码而已http://www.djangobook.com/en/2.0/chapter05.html

lincy 08-15 12:18

有瑕疵倒是没什么,遗憾的是,网站已经N久没更新了

Lyrus 12-08 13:57

这个就不要吹毛求疵了 星号的意思肯定不是python语法的一部分啊

linghu 12-21 16:54

晕死啊,这里是不需要缩进的,缩进会出错。

vose 12-25 02:31

我也以为*号是语法的一部分,还想着以前怎么没见过这种写法

cy 01-11 16:19

感谢各位,我直接删除前后的** 一码通过。

Joe 02-25 09:14

建议像原版一样,加粗新加代码段,没必要前后加**。当然一看语法有问题,但这东西放在这里容易误解。

Kyle Yang 03-24 09:46

是两个_连在一起,而不是一个。大家注意!

Eric 04-14 14:48

删除语句前后的**,正常运行

yueguang 05-21 07:27

注释赛高

GT 08-23 20:26

这个星号很误导啊,还以为是某些高大上的python语法,从来没听说过。导致对自己python的知识羞愧了几秒钟

朱栋 11-09 17:03

这儿代码的缩进好像有点问题

qwe 01-19 07:56

我也被*误导了!!!

wl 02-24 10:14

__unicode__() 在高版本里已经替换成 __str__(),兼容老版本的python

yazhou 03-12 07:54

原来被**误导的不止我一个人,想哭

kunnka wong 07-08 08:36

添加完可以检查一下 python manage.py check

大隐 08-20 17:25

__unicode__() 在高版本里已经替换成 __str__(),兼容老版本的python 有批注就是好,少犯了好多的错误,执行成功

Python 3 中为 __str__() 12-23 07:22

Python 3 中为 __str__() Python 2 中为 __unicode__()

Ignora 01-25 05:49

有些网站内嵌的编辑器只支持标准html和markdown语法,但有些编辑器是支持非标准的语法的,比如typora,关闭标准语法后很多模糊的语法也能正确渲染,但是粘贴到网站就挂了

对这一段的评论会显示在这里

就象你看到的一样, __unicode__() 方法可以进行任何处理来返回对一个对象的字符串表示。 PublisherBook对象的__unicode__()方法简单地返回各自的名称和标题,Author对象的__unicode__()方法则稍微复杂一些,它将first_namelast_name字段值以空格连接后再返回。

IIssNan 11-06 06:33

这段翻译为: 就象你看到的一样, __unicode__() 方法可以进行任何处理来返回对一个对象的表示。在这里,Publisher 和Book 的__unicode__() 方法分别返回对象的name和title属性值,而Authoer的__unicode__() 方法则稍微复杂一些,她将first_name 和last_name 字段值以空格连接后再返回。 翻译时,后台会出现500错误。

fan 05-11 08:08

”进行任何处理“ 感觉有点怪怪的,应该改成“可以进行任意处理”

gudeng 07-03 03:59

**不去掉报错呀

agon 10-20 01:32

python3用def __str__(self):就行了吧

hbyzw 05-15 01:03

python3中的__unicode__()不起作用,用__str__()就可以

mihello 08-04 08:52

学习了

djpython 09-09 10:43

谢谢提醒,现在用__str__(self)方法好使。。

匿名读者 10-28 08:47

谢谢提醒~~python3 这个问题困惑了下,__str__搞定

匿名读者 04-19 08:01

python3 所有的本来就是 unicode所以就不需要了

abc 08-13 01:40

** ** 括起来的是 markdown语法 用来加粗表示强调的 这里应该是因为在代码中 所以效果被忽略了

twelve 05-11 06:22

数据库里面存放了一条中文信息,在shell里面用Publisher.objects.all() 报:ERROR - failed to write data to stream: <open file '<stdout>', mode 'w' at 0x7f528649c1e0> 把这条信息删除了,再次输入 Publisher.objects.all(),就没问题了,中文问题如何解决?

stepone 08-26 05:00

django:1.6.11 python 3.3.2:__str__搞定

不满 06-21 15:05

python2.7 也要用__str__(self)方法

对这一段的评论会显示在这里

对__unicode__()的唯一要求就是它要返回一个unicode对象 如果__unicode__() 方法未返回一个Unicode对象,而返回比如说一个整型数字,那么Python将抛出一个TypeError 错误,并提示:”coercing to Unicode: need string or buffer, int found” 。

对这一段的评论会显示在这里

Unicode对象

对这一段的评论会显示在这里

什么是Unicode对象呢?

对这一段的评论会显示在这里

你可以认为unicode对象就是一个Python字符串,它可以处理上百万不同类别的字符——从古老版本的Latin字符到非Latin字符,再到曲折的引用和艰涩的符号。

对这一段的评论会显示在这里

普通的python字符串是经过编码的,意思就是它们使用了某种编码方式(如ASCII,ISO-8859-1或者UTF-8)来编码。 如果你把奇特的字符(其它任何超出标准128个如0-9和A-Z之类的ASCII字符)保存在一个普通的Python字符串里,你一定要跟踪你的字符串是用什么编码的,否则这些奇特的字符可能会在显示或者打印的时候出现乱码。 当你尝试要将用某种编码保存的数据结合到另外一种编码的数据中,或者你想要把它显示在已经假定了某种编码的程序中的时候,问题就会发生。 我们都已经见到过网页和邮件被???弄得乱七八糟。 ?????? 或者其它出现在奇怪位置的字符:这一般来说就是存在编码问题了。

LynnFang 10-11 14:11

不错

LynnFang 10-11 14:12

之前一直不是很清晰,这么一说就清晰多了

对这一段的评论会显示在这里

但是Unicode对象并没有编码。它们使用Unicode,一个一致的,通用的字符编码集。 当你在Python中处理Unicode对象的时候,你可以直接将它们混合使用和互相匹配而不必去考虑编码细节。

对这一段的评论会显示在这里

Django 在其内部的各个方面都使用到了 Unicode 对象。 模型 对象中,检索匹配方面的操作使用的是 Unicode 对象,视图 函数之间的交互使用的是 Unicode 对象,模板的渲染也是用的 Unicode 对象。 通常,我们不必担心编码是否正确,后台会处理的很好。

leo 12-07 06:24

"后台会处理的很好"-->"后台会处理得很好"

ode2free 04-09 11:02

楼上“的”“得”区分的清楚啊,基础扎实啊,一般编辑都比不上。

匿名读者 07-19 03:32

如果大家都能把小学语文学扎实了用好了 国民语文水平就太好了~

AlsoTang 12-13 07:13

2L的,这个’的‘与’得‘的错误可是语文课一直以来强调的啊。

yuwen 01-18 07:22

小学语文学得好是一件好事,但是要与时俱进。 的得地在一些情况是通用的。买本新字典把。

magnil 03-10 08:01

目前“的”字可代替“得”“地”,新的小学语文教材里已经不强调这三字的区别了。

chifa 04-25 02:31

“的”“得”“地”这三个字的粤语发音都不一样。

lincy 08-15 12:29

“的”“得”“地”在网上根本就是乱成一团

冯日 11-06 10:13

呵呵

Tea 04-13 14:59

你们还真是无聊。。。。

gandy 09-01 06:42

这里真好玩

yazhou 03-12 05:30

你们居然在讨论这个问题

ffuyfd 03-25 07:56

挺逗啊,在这里可以学到各种知识,包括“的”和“得”用法

xiaopanddxiong 08-08 06:56

还真是技术问题

AndrewYang 03-23 05:31

哈哈^_^

mzfly 12-28 11:42

的得地,广东银很容易分清,读音都不一样

对这一段的评论会显示在这里

注意,我们这里只是对Unicode对象进行非常浅显的概述,若要深入了解你可能需要查阅相关的资料。 这是一个很好的起点:http://www.joelonsoftware.com/articles/Unicode.html。

对这一段的评论会显示在这里

为了让我们的修改生效,先退出Python Shell,然后再次运行 python manage.py shell 进入。(这是保证代码修改生效的最简单方法。)现在Publisher对象列表容易理解多了。

对这一段的评论会显示在这里
>>> from books.models import Publisher
>>> publisher_list = Publisher.objects.all()
>>> publisher_list
[<Publisher: Apress>, <Publisher: O'Reilly>]
CcChen 03-21 05:44

貌似我得到的结果依然还是,[<Publisher: Publisher object>, <Publisher: Publisher object>] 什么回事?

CcChen 03-21 07:56

如果得不到这个结果。可以关闭python调试窗口。重新运行manage.py shell进行调试。因为先前的操作不会自动检测调整models.py的修改的。

soul_eater 08-31 09:22

退出 shell 调试方法:Ctrl+Z 然后回车。

Lang 09-06 16:33

退出Shell还可以:输入exit或exit(),回车退出。

donly 03-07 12:26

Ctrl+Z:[1]+ Stopped python manage.py shell。 推荐使用Ctrl+D

Yan 06-25 02:49

相当于kill进程

Lee 12-11 20:23

use __str__ problem will fix

Jason 04-17 13:46

我确实退出了shell 进入后还是显示object ??

Graduatedben 05-06 09:09

用quit()重启了shell,还是显示object,怎么回事?

qysnolan 05-14 15:13

同问,unicode和str都试过了,shell也退出了,还是显示不对

qysnolan 05-14 15:17

搞好了,只用exit()或者control+D退出shell不行,一定要用quit()退出shell

xxj 05-17 12:04

https://docs.djangoproject.com/en/dev/topics/db/queries/#topics-db-queries 这里就有原因,不是_unicode_()而是__unicode__()

skyler 12-18 08:02

是不是很多人连Python 的基本知识都没看过就直接 django了?要不然怎么这么多人分不清一条下划线和两条下划线

nuihaci 01-02 12:56

用__str__就可以,但是用__unicode__就不行。值得研究下,哪位大侠说说原因呢? 退出的方法都试过了。

box 01-15 14:57

修改后提示 **def __unicode__(self):** ^ SyntaxError: invalid syntax

呆滞的慢板 01-29 07:48

我发现了,如果在 py2.7 下面,还有这个 __unicode__ 方法,但是如果换了 py3.3,根本就跟没写一样,估计这个系统方法是被 deprecated 之列。 如果想要达到同样的效果,同样的方法重载一下 __str__ 方法即可(当然前提是在 py3.3 下面)

H 02-21 02:06

py3.3下,好像不需要这个编码了。第一个版本运行就是这个输出结果。

H 02-21 04:16

上面说得不多 Python3.3.下 __unicode__ 要更改成 __str__ 在再上面有人提到是Django1.5因为要兼容python3.x更改的。

yueguang 05-21 07:35

__unicode__ 这里是双下划线 没有认真学python 就来搞django 真是有点麻烦啊 感谢楼上大神一语惊醒梦中人

丁舶洋 05-30 16:31

不是双下滑线的问题,双线单线的区别我了解,我用的是python 3.3,但是__unicode__()在这个版本里面不起作用,后来换了__str__()便可以正确输出了

xavier 07-19 04:45

有评论就是好,避免踩坑

django1.8 06-16 01:47

python 3.3 不支持__unicode__,只支持__str__

uio8j 10-01 02:05

确实,使用python 3.5无反应,换成__str__就好了

cc 06-17 05:45

用python3.4,死活都无法显示具体的对象名,用__str__就可以。

__str__ 08-19 05:16

匿名读者 04-23 13:03

楼上正解,使用__str__().

对这一段的评论会显示在这里

请确保你的每一个模型里都包含 __unicode__() 方法,这不只是为了交互时方便,也是因为 Django会在其他一些地方用 __unicode__() 来显示对象。

对这一段的评论会显示在这里

最后, __unicode__() 也是一个很好的例子来演示我们怎么添加 行为 到模型里。 Django的模型不只是为对象定义了数据库表的结构,还定义了对象的行为。 __unicode__() 就是一个例子来演示模型知道怎么显示它们自己。

蚁斗士 02-25 07:11

本段的第一个__unicode()__应该为__unicode__()。

image72 08-09 21:19

选择对象 SELECT id, name, address, city, state_province, country, website FROM book_publisher; 这一句SQL得到的结果肯定不是 >>> Publisher.objects.all() [<Publisher: Addison-Wesley>, <Publisher: O'Reilly>, <Publisher: Apress Publishing>]

tonylifei 06-04 09:24

To image72 :因为在模型中添加了 __unicode__() ,所以得到的结果是 >>> Publisher.objects.all() [<Publisher: Addison-Wesley>, <Publisher: O'Reilly>, <Publisher: Apress Publishing>]

googcheng 06-13 14:33

Book 这么插入数据啊

jjt 08-23 14:27

__unicode__()是不是类似与c#的ToString()方法啊

qq_345421243 05-10 06:21

应该是的

对这一段的评论会显示在这里

插入和更新数据

morphling 11-04 08:43

这节有一点不明白:假设我要更新之前创建过的Publisher记录,那么这个p怎么来?

morphling 11-04 08:45

好吧,明白了,用publisher_list = Publisher.objects.all(), publisher_list[0].xxx或publisher_list[1].xxx来修改

morphling 11-04 08:58

悲剧,LS方法只能获取值,不能更新值,有大神指导下后人不?

adoo 12-20 08:08

看得我头晕脑胀,读书的时候也最怕上数据库的课了,数据库的操作真是沉闷乏味,让人很难集中精神。

mr.liu 08-04 02:48

+1

对这一段的评论会显示在这里

你已经知道怎么做了: 先使用一些关键参数创建对象实例,如下:

对这一段的评论会显示在这里
>>> p = Publisher(name='Apress',
...         address='2855 Telegraph Ave.',
...         city='Berkeley',
...         state_province='CA',
...         country='U.S.A.',
...         website='http://www.apress.com/')
刘芳 03-13 10:08

models实例化

john 06-22 12:49

没人尝试实例化Book类吗?

weiyue 05-22 06:56

要再引入一次Publisher

对这一段的评论会显示在这里

这个对象实例并 没有 对数据库做修改。 在调用save() 方法之前,记录并没有保存至数据库,像这样:

对这一段的评论会显示在这里
>>> p.save()
对这一段的评论会显示在这里

在SQL里,这大致可以转换成这样:

对这一段的评论会显示在这里
INSERT INTO books_publisher
    (name, address, city, state_province, country, website)
VALUES
    ('Apress', '2855 Telegraph Ave.', 'Berkeley', 'CA',
     'U.S.A.', 'http://www.apress.com/');
对这一段的评论会显示在这里

因为 Publisher 模型有一个自动增加的主键 id ,所以第一次调用 save() 还多做了一件事: 计算这个主键的值并把它赋值给这个对象实例:

对这一段的评论会显示在这里
>>> p.id
52    # this will differ based on your own data
Rex.Ye 01-09 08:35

应该是>>> p.id=52吧

zjnjxufe 01-25 09:32

你那是手动赋值? 他这里是save之后会把数据库里的主键id传给p。p.id就打印出了他的值

JunJie 01-31 02:07

为什么我返回的是3L 再插一条是4L

tao 03-25 09:04

我也是3L

wdmyong 06-29 02:28

我的显示也是3L,“L”应该表示的是用长整型,如果不想看到"L",你可以用print p.id。这里显示52应该指的是文中插入的出版商数目有这么多了吧

Harry 12-31 07:31

>>> p.id 3 返回的值是 3

匿名读者 04-06 13:01

我怎么id都不显示啊

tets 03-07 15:05

p.save()后,p.id才会显示

对这一段的评论会显示在这里

接下来再调用 save() 将不会创建新的记录,而只是修改记录内容(也就是 执行 UPDATE SQL语句,而不是 INSERT 语句):

对这一段的评论会显示在这里
>>> p.name = 'Apress Publishing'
>>> p.save()
对这一段的评论会显示在这里

前面执行的 save() 相当于下面的SQL语句:

对这一段的评论会显示在这里
UPDATE books_publisher SET
    name = 'Apress Publishing',
    address = '2855 Telegraph Ave.',
    city = 'Berkeley',
    state_province = 'CA',
    country = 'U.S.A.',
    website = 'http://www.apress.com'
WHERE id = 52;
mark 11-11 06:26

Jcr 02-15 06:01

http://ifeve.com/race-conditions-and-critical-sections/ 什么是竞态条件

xavier 07-26 07:52

1楼的mark什么情况?出现了好多次了

xiaopanddxiong 08-08 07:11

@xavier mark是做标记的意思 可能这个人只是在此做一个标记,方便以后查阅吧 但是不排除纯属无聊手贱发着玩

对这一段的评论会显示在这里

注意,并不是只更新修改过的那个字段,所有的字段都会被更新。 这个操作有可能引起竞态条件,这取决于你的应用程序。 请参阅后面的“更新多个对象”小节以了解如何实现这种轻量的修改(只修改对象的部分字段)。

meng 03-13 12:22

竞态条件(race condition),从多进程间通信的角度来讲,是指两个或多个进程对共享的数据进行读或写的操作时,最终的结果取决于这些进程的执行顺序。--internet

guanbin 04-07 04:35

楼上的注释太好了

stevenlee87 06-26 06:00

竞态条件(race condition),从多进程间通信的角度来讲,是指两个或多个进程对共享的数据进行读或写的操作时,最终的结果取决于这些进程的执行顺序。--internet

iewgnaw 08-02 03:56

为什么要更新所有字段呢,不能只更新name呢

mihello 08-04 09:28

iewgnaw 下面有讲如何实现!!

Ignora 01-25 06:10

也就是说这里存在互斥问题,一般数据库是存在事务锁的,而且多线程的程序显然在编写app的时候必须考虑这个问题

对这一段的评论会显示在这里
UPDATE books_publisher SET
    name = 'Apress Publishing'
WHERE id=52;
对这一段的评论会显示在这里

选择对象

对这一段的评论会显示在这里

当然,创建新的数据库,并更新之中的数据是必要的,但是,对于 Web 应用程序来说,更多的时候是在检索查询数据库。 我们已经知道如何从一个给定的模型中取出所有记录:

对这一段的评论会显示在这里
>>> Publisher.objects.all()
[<Publisher: Apress>, <Publisher: O'Reilly>]
Kuner 09-19 08:19

>>> Publisher.objects.all() [<Publisher: Apress>, <Publisher: O'Reilly>, <Publisher: Apress Publishing>]

jason 01-09 01:51

不是只是更新的吗。。。

sammy 01-10 03:37

这句不是应该只相当于 select name from books_publihser么? 除了name字段其他都没有显示啊

looly 01-20 15:53

@sammy 是全部字段查出来了,但是只显示了name吧?

zjnjxufe 01-25 08:27

@sammy你应该去看一下上面的__unicode__函数那一段。。

dkjiaoyang 04-10 04:20

Publisher.objects.all() [<Publisher: Apress>, <Publisher: O'Reilly>, <Publisher: Apress Publishing>] 怎么不一样?

guwb 05-23 09:22

这里用publiser_list[0].name怎么就更新不了啊,非得用刚建的p.name?

Hankz 05-30 11:38

真心爽!!!

wdmyong 06-29 02:33

@guwb:我一开始也想这么更新,但是没成功,想了一下是不行,因为返回的是对象列表,并不是数据库中的数据,就是说publiser_list[0]相当于一个返回的对象,应该不是数据库中的第一项数据了。

streethacker 07-23 13:05

@guwb 我用的是Django 1.4,如下: p = Publisher.objects.all() print p[0].name print p[0].website 这样是可以的。

Lyrus 12-08 15:26

Publisher.objects.all()获取的是所有属于Publisher类也就是模型的实例对象,所以publiser_list[0]应该是第一个实例对象,相当于数据库对象,publiser_list[0].name 就是查询对应表段的值

skyler 12-18 08:22

应该显示三个对象吧

跳动的字符 02-14 16:12

.all() 查询的结果怎么遍历呢

zsp 04-16 01:33

如果表中的name是汉字的话,Publisher.objects.all()显示出来有问题,不知如何解决

mihello 08-04 11:16

zsp, 如果是mysql 请确保server 和client 都是utf8 编码, [mysqld] character_set_server = utf8 client端例如phpmyadmin,建立数据库的时候选择utf8_general_ci

baichenjia 04-17 09:43

相当于 SELECT * FROM book_publisher

对这一段的评论会显示在这里

这相当于这个SQL语句:

对这一段的评论会显示在这里
SELECT id, name, address, city, state_province, country, website
FROM books_publisher;
对这一段的评论会显示在这里

注意

对这一段的评论会显示在这里

注意到Django在选择所有数据时并没有使用 SELECT* ,而是显式列出了所有字段。 设计的时候就是这样: SELECT* 会更慢,而且最重要的是列出所有字段遵循了Python 界的一个信条: 明言胜于暗示。

tonylifei 06-04 09:28

这一段似乎应该是 :注意到Django在选择所有数据时并没有使用 SELECT* , “也没有”列出所有字段

Senz 08-24 06:44

查了下原文"Notice that Django doesn’t use SELECT * when looking up data and instead lists all fields explicitly. " , "and instead lists all fields explicitly" 翻译成 “而是显式列出了所有字段”,并无不妥,楼上何来的“也没有”?

Senz 08-24 06:46

并且例子中,明显是列出了所有字段。

行之 12-18 18:20

同意ls

jason 12-11 11:50

明言胜于暗示 略屌

ULRA 01-06 15:22

explicit is better than implicit

detailyang 09-23 13:36

明言胜于暗示 ...所以不喜欢用locals() :)

ithee 12-23 07:42

明言胜于暗示 翻译厉害

对这一段的评论会显示在这里

有关Python之禅(戒律) :-),在Python提示行输入 import this 试试看。

AlsoTang 12-13 07:16

这个网页中的很多link貌似都没有被显示出来啊。而且为什么我一年前提出的一些错误到现在也没有得到修正呢。

yuwen 01-18 07:39

建议分算在评论里不知道网站建设者能看到吗 最好把建议统一收集一下,可以纠正不少错误呢~ 还有就是有疑问想得到解决通过评论的方便反馈很不及时呢,大家还是去论坛什么的吧。

bruce 07-01 06:51

The Zen of Python, by Tim Peters Beautiful is better than ugly. Explicit is better than implicit. Simple is better than complex. Complex is better than complicated. Flat is better than nested. Sparse is better than dense. Readability counts. Special cases aren't special enough to break the rules. Although practicality beats purity. Errors should never pass silently. Unless explicitly silenced. In the face of ambiguity, refuse the temptation to guess. There should be one-- and preferably only one --obvious way to do it. Although that way may not be obvious at first unless you're Dutch. Now is better than never. Although never is often better than *right* now. If the implementation is hard to explain, it's a bad idea. If the implementation is easy to explain, it may be a good idea. Namespaces are one honking great idea -- let's do more of those!

lincy 08-15 12:41

有些08、09年的建议都没有改进,这个网站基本算废弃了

Lyrus 12-08 15:28

介网站还有人维护吗?

迷途小前端 12-11 07:20

9494,:)

rex 07-29 09:42

感觉 虽然没有更新,但是 没有关闭啊。这里还是不错的。多看看别人的批注

xxx 08-15 02:31

确实好多内容都已经过时了,现在的django版本高了许多

good 08-19 05:29

Admin 10-18 06:41

import this|||python居然还有彩蛋~~

xiaopanddxiong 08-08 07:17

ls 说的对

猪头哥哥 12-01 06:04

别老想着人家更新 这是公益性质的 能翻译出来已经很感谢作者了。 剩下的,靠在座的各位了。

import that raise error 12-21 13:18

import that ..................... 报错,肿么回事啊

blackysy 07-02 07:42

我感觉这样更有意思,你们不会有一种跨越时空交流的感觉嘛, 哈哈~

对这一段的评论会显示在这里

让我们来仔细看看 Publisher.objects.all() 这行的每个部分:

对这一段的评论会显示在这里

首先,我们有一个已定义的模型 Publisher 。没什么好奇怪的: 你想要查找数据, 你就用模型来获得数据。

对这一段的评论会显示在这里

然后,是objects属性。 它被称为管理器,我们将在第10章中详细讨论它。 目前,我们只需了解管理器管理着所有针对数据包含、还有最重要的数据查询的表格级操作。

对这一段的评论会显示在这里

所有的模型都自动拥有一个 objects 管理器;你可以在想要查找数据时使用它。

dimens 04-11 05:44

你可以在想要查找数据时是使用它--->多一个“是”

对这一段的评论会显示在这里

最后,还有 all() 方法。这个方法返回返回数据库中所有的记录。 尽管这个对象 看起来 象一个列表(list),它实际是一个 QuerySet 对象, 这个对象是数据库中一些记录的集合。 附录C将详细描述QuerySet。 现在,我们就先当它是一个仿真列表对象好了。

C.J. 06-15 07:29

"这个方法返回返回数据库中所有的记录。" 该句多了一个返回

xcb 11-22 14:35

像一个列表

Lionel.Shen 10-11 02:02

为什么我的web返回的这样的结果: 代码: select_all = Publisher.objects.all() return render_to_response('books.html',{'select_all':select_all}) 结果: 示例 select_all:<QuerySet [<Publisher: Publisher object>, <Publisher: Publisher object>]>.

xiaopanddxiong 08-08 07:19

@Lionel.Shen 建议你去看一下前面的 # Python将对象以unicode的方式显示出来 def __unicode__(self): return self.name

对这一段的评论会显示在这里

所有的数据库查找都遵循一个通用模式:

iComes 02-17 15:02

少了一句?

iComes 02-17 15:06

e’ll call methods on the manager attached to the model we want to query against.

iComes 02-17 15:07

we’ll call methods on the manager attached to the model we want to query against.

Jerry 12-17 14:23

什么通用模式???

zjclost 02-02 11:03

调用模型的管理器来查找数据

streethacker 07-23 13:41

Any database lookup is going to follow this general pattern - we'll call methods on the manager attached to the model we want to query against. 任何对数据库的查询操作都遵循这样的模式:即 调用绑定在该模型上的管理器(objects)的相应方法(如all)。

Peter_XL 03-01 07:10

we’ll call methods on the manager attached to the model we want to query against. 我们将会调用附加在模型(model)管理器(objects)上的方法(methods)再次查询。

mzfly 12-28 12:17

所有的数据库查找都遵循一个通用模式:调用模型的管理器来查找数据。

对这一段的评论会显示在这里

数据过滤

mark 07-14 08:35

adamee 05-21 07:02

之前用过ThinkPHP框架,Django的这些东西看起来好熟悉,

对这一段的评论会显示在这里

我们很少会一次性从数据库中取出所有的数据;通常都只针对一部分数据进行操作。 在Django API中,我们可以使用filter() 方法对数据进行过滤:

对这一段的评论会显示在这里
>>> Publisher.objects.filter(name='Apress')
[<Publisher: Apress>]
junliang 05-23 07:11

看到这里的时候有个疑问,一个模型对应一张表,我根据一张表的id,要获取另一张表中的数据怎么办,

roger 11-20 08:58

foreign key

dowson 03-20 14:55

这个filter的例子不是太好..... 如果举这个例子的话 应该把前面的__unicode__()返回多一些数据 个人建议.... 类似select xxxx,xx,xx from books_publisher where name ='Apress' 吧

1 12-13 09:55

怎么到这就显示Models aren't loaded yet.了啊?

对这一段的评论会显示在这里

filter() 根据关键字参数来转换成 WHERE SQL语句。 前面这个例子 相当于这样:

对这一段的评论会显示在这里
SELECT id, name, address, city, state_province, country, website
FROM books_publisher
WHERE name = 'Apress';
对这一段的评论会显示在这里

你可以传递多个参数到 filter() 来缩小选取范围:

对这一段的评论会显示在这里
>>> Publisher.objects.filter(country="U.S.A.", state_province="CA")
[<Publisher: Apress>]
对这一段的评论会显示在这里

多个参数会被转换成 AND SQL从句, 因此上面的代码可以转化成这样:

匿名读者 04-08 02:20

AND有了,OR怎么办?

imairy 07-29 17:19

or的话,from django.db.models import Q Publisher.objects.filter(Q(name='Apress')|Q(name="O'Reilly"))

mihello 08-04 13:57

ls 对的,详情参看: https://docs.djangoproject.com/en/1.6/topics/db/queries/

yazhou 03-12 08:07

这样对比着挺好的,即学习了django又明白了他背后的原理

对这一段的评论会显示在这里
SELECT id, name, address, city, state_province, country, website
FROM books_publisher
WHERE country = 'U.S.A.'
AND state_province = 'CA';
对这一段的评论会显示在这里

注意,SQL缺省的 = 操作符是精确匹配的, 其他类型的查找也可以使用:

wowo 11-02 06:39

我用的1.3.1, DATABASE_ENGINE='mysql', 会报DeprecationWarning: Short names for ENGINE in database configurations are deprecated. Prepend default.ENGINE with 'django.db.backends.' 改成DATABASE_ENGINE='django.db.backends.mysql'就好了

soda 08-02 09:27

wowo说的对 ,,我的1.4的 也是这个问题 不过最后一行报错已经明确给出了答案

对这一段的评论会显示在这里
>>> Publisher.objects.filter(name__contains="press")
[<Publisher: Apress>]
Woods 10-24 01:44

为何我用name_contains会报错?Cannot resolve keyword 'name_contains' into field

Woods 10-24 01:45

哦哦明白了,name 和 contains之间是两个下划线__

ULRA 01-06 15:35

我每天早上都会被自己帅醒

misutt 10-19 06:22

ls = =|||

迷途小前端 12-11 07:26

@ULRA - -!

Tea 04-13 15:18

这个不支持正则吗?

name__contains 08-19 05:46

对这一段的评论会显示在这里

namecontains 之间有双下划线。和Python一样,Django也使用双下划线来表明会进行一些魔术般的操作。这里,contains部分会被Django翻译成LIKE语句:

tonylifei 06-04 09:38

Django也使用双下划线来表明会进行一些魔术般的操作的方法

AlsoTang 12-13 07:21

为何这里不用单下划线呢。。真奇怪。。

carlcarl 04-10 19:41

因為有些資料庫欄位命名都是用xxx_xxx來命名的吧 用兩個底線是避免跟已有的命名衝突到 我猜啦

roger 11-20 09:01

楼上台湾人?

dowson 03-20 14:58

双下划线 延续了python特殊方法的风格吧....

mihello 03-26 07:19

LS LS+ 正解

dweiwei 05-20 09:29

这里有一个错误: 如果是用Publisher.objects.filter(name__contains="press") 那么sql语句会是 SELECT id, name, address, city, state_province, country, website FROM books_publisher WHERE name LIKE BINARY '%press%'; 而用icontains就会忽略大小写:...WHERE name LIKE '%press%';

zy0739 06-07 07:23

LSNB 这么小的错误都能看出来

simons 06-18 06:37

所有的附录都在哪里啊

lincy 08-15 13:00

附录见本书第一版http://www.djangobook.py3k.cn/

stevenlee87 06-26 07:13

https://docs.djangoproject.com/en/dev/ref/models/querysets/

匿名读者 07-09 08:32

python魔法方法

mihello 08-04 14:00

关于 icontains contains 尽在 https://docs.djangoproject.com/en/1.6/topics/db/queries/

baichenjia 04-17 10:12

python 魔法方法和魔法属性

celerybean 10-10 07:32

这种双下划线接单词的方式感觉有点蛋疼,个人还是习惯使用sqlalchemy的操作符的方式

Kazuhira 06-26 09:14

这样的话的确不用记住SQL的查询语法,相反却要记得一点Python的类用法....

猪头哥哥 12-01 06:14

还有这种操作?

对这一段的评论会显示在这里
SELECT id, name, address, city, state_province, country, website
FROM books_publisher
WHERE name LIKE '%press%';
对这一段的评论会显示在这里

其他的一些查找类型有:icontains(大小写无关的LIKE),startswithendswith, 还有range(SQLBETWEEN查询)。 附录C详细描述了所有的查找类型。

对这一段的评论会显示在这里

获取单个对象

对这一段的评论会显示在这里

上面的例子中filter() 函数返回一个记录集,这个记录集是一个列表。 相对列表来说,有些时候我们更需要获取单个的对象, get() 方法就是在此时使用的:

对这一段的评论会显示在这里
>>> Publisher.objects.get(name="Apress")
<Publisher: Apress>
cheer 02-11 01:09

这里为什么会有get的错误提示?好像是get方法的错误

gl 03-30 07:33

>>> Publisher.objects.get(name='apress') <Publisher: Apress>

吴某人 04-11 08:51

get()和filter()在本质上是不同的。前者查找到的结果是一个「对象」,后者查找到的是一个「列表」。

猪头哥哥 12-01 06:15

楼上说的很nice

lee 12-05 07:57

猜测get相当于选取filter[0]

lee 12-05 07:58

撤回ls说的

对这一段的评论会显示在这里

这样,就返回了单个对象,而不是列表(更准确的说,QuerySet)。 所以,如果结果是多个对象,会导致抛出异常:

sapjax 07-26 06:42

为什么找不到也会抛异常呢,难道不能返回一个None么

ULRA 01-06 15:45

我发现好多人看文章都是不看完下文就出结论。。结合上下文啊。。

xavier 07-26 08:02

@1楼,不是找不到,是找到很多个。。

对这一段的评论会显示在这里
>>> Publisher.objects.get(country="U.S.A.")
Traceback (most recent call last):
    ...
MultipleObjectsReturned: get() returned more than one Publisher --
    it returned 2! Lookup parameters were {'country': 'U.S.A.'}
对这一段的评论会显示在这里

如果查询没有返回结果也会抛出异常:

对这一段的评论会显示在这里
>>> Publisher.objects.get(name="Penguin")
Traceback (most recent call last):
    ...
DoesNotExist: Publisher matching query does not exist.
对这一段的评论会显示在这里

这个 DoesNotExist 异常 是 Publisher 这个 model 类的一个属性,即 Publisher.DoesNotExist。在你的应用中,你可以捕获并处理这个异常,像这样:

对这一段的评论会显示在这里
try:
    p = Publisher.objects.get(name='Apress')
except Publisher.DoesNotExist:
    print "Apress isn't in the database yet."
else:
    print "Apress is in the database."
泥鳅 05-05 15:27

为什么不能用filter,然后判断列表为空呢?

路人 08-26 07:46

这里只是说可以捕获这个异常,演示一下,没有太大实际意义

sapjax 07-26 06:47

filter找不到的话,确实是个空列表啊,get找不到就抛异常...

零或一 05-05 04:17

很不明白,为什么不能直接在filter里面做是否为空的处理呢?django不是尽可能的让程序员少些代码吗?如果说每次都需要写异常捕获那不是多此一举了吗。反正错误肯定是不会需要的!

Xoozi 07-31 22:39

用异常的好处就是所有调用都不用检查返回值,功能代码部分,只写正常逻辑。不正常的处理全部写在异常捕获块里面,这样是很舒服的。 以前写Win桌面程序每次检查那些API的DWORD返回值都让我非常厌烦,用Java,Python后就从来不返回错误码,任何错误都抛异常。代码变得非常清晰,再也不用一行API调用配个if(0!=result){}

lincy 08-15 13:04

@零或一:Python对你好,你却不知道

xon 06-30 09:46

看评论也能涨知识啊

anonymous 06-01 07:01

这个写法有问题,如果这个条件查出多于1条,还会抛出MultipleObjectsReturned异常.

大隐 08-20 17:48

确实是,经过我试了下,这个get方法,只能查唯一属性的值,比如name只有一个new,那么可以用name=new来获取这个字段的值,如果有两个new那就报错了

对这一段的评论会显示在这里

数据排序

jerry 04-27 00:51

mark

对这一段的评论会显示在这里

在运行前面的例子中,你可能已经注意到返回的结果是无序的。 我们还没有告诉数据库 怎样对结果进行排序,所以我们返回的结果是无序的。

对这一段的评论会显示在这里

在你的 Django 应用中,你或许希望根据某字段的值对检索结果排序,比如说,按字母顺序。 那么,使用 order_by() 这个方法就可以搞定了。

对这一段的评论会显示在这里
>>> Publisher.objects.order_by("name")
[<Publisher: Apress>, <Publisher: O'Reilly>]
weetao 05-05 05:48

django 1.4出现“AttributeError: 'Manager' object has no attribute 'oder_by'”错误。改为:Publisher.objects.all().order_by('name')

weetao 05-05 05:50

哦 笔误了,2种都可以

weetao 05-05 06:09

是我输入错误了,2种方法都可以

ULRA 01-06 15:48

帅哥,你太鸡动了

xavier 07-19 06:55

这个评论框确实不太好用,没有medium那种好。

对这一段的评论会显示在这里

跟以前的 all() 例子差不多,SQL语句里多了指定排序的部分:

对这一段的评论会显示在这里
SELECT id, name, address, city, state_province, country, website
FROM books_publisher
ORDER BY name;
对这一段的评论会显示在这里

我们可以对任意字段进行排序:

对这一段的评论会显示在这里
>>> Publisher.objects.order_by("address")
[<Publisher: O'Reilly>, <Publisher: Apress>]

>>> Publisher.objects.order_by("state_province")
[<Publisher: Apress>, <Publisher: O'Reilly>]
对这一段的评论会显示在这里

如果需要以多个字段为标准进行排序(第二个字段会在第一个字段的值相同的情况下被使用到),使用多个参数就可以了,如下:

猪头哥哥 12-01 06:18

这里的排序还是很实用滴

对这一段的评论会显示在这里
>>> Publisher.objects.order_by("state_province", "address")
 [<Publisher: Apress>, <Publisher: O'Reilly>]
对这一段的评论会显示在这里

我们还可以指定逆向排序,在前面加一个减号 - 前缀:

对这一段的评论会显示在这里
>>> Publisher.objects.order_by("-name")
[<Publisher: O'Reilly>, <Publisher: Apress>]
对这一段的评论会显示在这里

尽管很灵活,但是每次都要用 order_by() 显得有点啰嗦。 大多数时间你通常只会对某些 字段进行排序。 在这种情况下,Django让你可以指定模型的缺省排序方式:

对这一段的评论会显示在这里
class Publisher(models.Model):
    name = models.CharField(max_length=30)
    address = models.CharField(max_length=50)
    city = models.CharField(max_length=60)
    state_province = models.CharField(max_length=30)
    country = models.CharField(max_length=50)
    website = models.URLField()

    def __unicode__(self):
        return self.name

    **class Meta:**
        **ordering = ['name']**
tonylifei 06-04 09:47

同样的,这段代码中的 *** 和 ** 不要跟着输入

hfgsyy 12-26 08:54

能不能给新增的代码加段特殊的样式,不要把标示放进代码中。

goog 06-12 08:03

** 没有啊

匿名读者 12-06 01:20

作者应该是为了显示的表示,增加部分的代码,所以使用** 来进行标识。 我觉得应该用文字明显的描述出来!

Rex.Ye 01-09 08:54

很明显,排版用的是MarkDown。 正常情况下**xx**被渲染成加粗字体(Ctrl+B)的。但是如果是在代码区块中,**xx**不会被渲染,而是原样输出为**xx**。 已经用MarkdownPad测试。

Rex.Ye 01-09 08:55

很明显,排版用的是MarkDown。 正常情况下**xx**被渲染成加粗字体(Ctrl+B)的。但是如果是在代码区块中,**xx**不会被渲染,而是原样输出为**xx**。 已经用MarkdownPad测试。 而且,Markdown官方文档中也有明确说明: 代码区块中,一般的 Markdown 语法不会被转换,像是星号便只是星号,这表示你可以很容易地以 Markdown 语法撰写 Markdown 语法相关的文件。

wkshare 01-14 04:50

还以为是python的什么新语法。感谢这些注释的贡献者们。

wkshare 01-14 04:52

class Meta:是否可以写成class Meta(object):

ambition 05-31 10:33

又是 ** ,你以为同一个坑我们会跌两次?哼哼~你太小看我们了~

francis 08-05 11:22

这个要先退出解释器,再重启解释器后才可以吧

relax 11-26 03:54

该效果在重启才能生效。重新导入Pbulisher类是不行的

alen 02-25 14:29

为什么重新启动了解释器,还是没有效果

HAL9000 05-11 15:19

@alen 一定是你退出的方式不对... exit()

starof 02-04 02:54

@alen 检查一下是不是把class Meta加到Publisher上了,如果加到book之类的肯定就不对

lzb 02-11 05:00

可以给新加的代码加个颜色或者上面加行注释,这样的**太误导人了,特别是对我这样的python不太熟的人

yazhou 03-12 08:16

虽然这个坑大家跳过去了,感觉这种交流方式还挺好的

vanpersiexp 05-08 09:10

加个#注释多简单明了啊

猪头哥哥 12-01 06:20

去掉**,重启解释器生效

Asterism2012 06-28 02:48

还不如旁边加个文字注释。

Ignora 01-25 06:28

*并非标注,而是没有正常渲染的排版语法

电饭锅 02-06 13:13

那如果也要指定多个属性的排序呢?在列表后继续添加字段就行了吗?

对这一段的评论会显示在这里

现在,让我们来接触一个新的概念。 class Meta,内嵌于 Publisher 这个类的定义中(如果 class Publisher 是顶格的,那么 class Meta 在它之下要缩进4个空格--按 Python 的传统 )。你可以在任意一个 模型 类中使用 Meta 类,来设置一些与特定模型相关的选项。 在 附录B 中有 Meta 中所有可选项的完整参考,现在,我们关注 ordering 这个选项就够了。 如果你设置了这个选项,那么除非你检索时特意额外地使用了 order_by(),否则,当你使用 Django 的数据库 API 去检索时,Publisher对象的相关返回值默认地都会按 name 字段排序。

snyh 05-13 11:36

这里是排版错误还是? 我没有参考英文版, 但通过django源码和python经验 这里class Meta缩进多了2个吧. class Meta 应该和 def __unicode__(self)是同一缩进级别 虽然一般是4个空格, 但上面的代码默认是使用2个空格 所以文本叙述和代码有冲突

Lang 09-06 16:48

@snyh,没有错。 class Meta 和 def __unicode__(self)二者是同一缩进的,都是4个空格,**只是排版上表示新加的代码,实际录入时不要输入。

Kuner 09-19 09:48

别忘了重新加载 models.py

zjclost 02-02 11:25

我把class Meta中ordering设为'-name'试了下,要ctrl+break后重新python manage.py shell后才生效

Max 04-11 02:34

谢LS提醒

stevenlee87 06-26 08:28

其他options:https://docs.djangoproject.com/en/dev/ref/models/options/#

xiaopanddxiong 08-08 07:36

附录B 在哪里啊

Ignora 01-25 06:31

笔记本电脑没有break键...

对这一段的评论会显示在这里

连锁查询

chiedey 04-13 03:05

连锁查询?!应该是连接查询吧...

glimmer 05-30 14:07

应该是链式查询

对这一段的评论会显示在这里

我们已经知道如何对数据进行过滤和排序。 当然,通常我们需要同时进行过滤和排序查询的操作。 因此,你可以简单地写成这种“链式”的形式:

对这一段的评论会显示在这里
>>> Publisher.objects.filter(country="U.S.A.").order_by("-name")
[<Publisher: O'Reilly>, <Publisher: Apress>]
joybull 08-16 08:10

order_by("-name" ), 这里的name字段要在前面加减号(-)吗, 应该是输入错误吧, 前面后面的例子都没有这样用.

joybull 08-16 08:14

负索引这样写啊, ^_^

zbyzhlsp 12-06 08:32

这个连锁查询好酷啊~~

everpcpc 07-16 09:28

order_by查询出来的数据进行[0:20]切片之后就无法再次进行排序了…… 而使用reverse()方法之后得到的结果不是切片之后逆序,而是逆序查询之后再切片…… 这该怎么解决啊……

sapjax 07-26 06:58

@everpcpc 那就先逆序查询 然后[-20:]切片嘛

zjclost 02-02 11:32

@everpcpc 返回的对象并不是列表,只是伪列表,切片不一定有效

lincy 08-15 13:19

这方法,果然继承了Python的大道至简啊

牛三金 04-22 08:37

链式操作,javascript的JQuery框架也提供类似的操作。

gibeon 07-17 05:40

order和filter使用顺序无关

对这一段的评论会显示在这里

你应该没猜错,转换成SQL查询就是 WHEREORDER BY 的组合:

对这一段的评论会显示在这里
SELECT id, name, address, city, state_province, country, website
FROM books_publisher
WHERE country = 'U.S.A'
ORDER BY name DESC;
Andy Van 01-30 13:07

mysql> SELECT id, name, address, city, state_province, country, website -> FROM books_publisher -> WHERE country = 'U.S.A' -> ORDER BY name DESC; Empty set (0.01 sec) 输出空集 改用下面的命令则输出正常:

Andy Van 01-30 13:08

mysql> SELECT id, name, address, city, state_province, country, website -> FROM books_publisher -> WHERE country = 'U.S.A' -> ORDER BY name DESC; Empty set (0.01 sec) 输出空集 改用下面的命令则输出正常: mysql> SELECT id, name, address, city, state_province, country, website -> FROM books_publisher -> WHERE country like '%U%' -> order by name desc; +----+-------------------+-----------------------+-----------+----------------+- --------+-------------------------+ | id | name | address | city | state_province | country | website | +----+-------------------+-----------------------+-----------+----------------+- --------+-------------------------+ | 2 | O'Reilly | 10 Fawcett St. | Cambridge | MA | U.S.A. | http://www.oreilly.com/ | | 3 | Apress Publishing | 2855 Telegraph Ave. | Berkeley | CA | U.S.A. | http://www.apress.com/ | | 1 | Apress | 2855 Telegraph Avenue | Berkeley | CA | U.S.A. | http://www.apress.com/ | +----+-------------------+-----------------------+-----------+----------------+- --------+-------------------------+ 3 rows in set (0.00 sec) 为何?请大师指示?

fc2002002002 02-21 02:05

@Andy Van U.S.A. A后面还有一个'.'

对这一段的评论会显示在这里

限制返回的数据

对这一段的评论会显示在这里

另一个常用的需求就是取出固定数目的记录。 想象一下你有成千上万的出版商在你的数据库里, 但是你只想显示第一个。 你可以使用标准的Python列表裁剪语句:

Kenneth 05-12 05:52

这里的slice操作应该是针对python的,而不是针对数据库的。也就是说从数据库取的还是一堆数据,只是在python端截取了一部分吧。不知道有没有理解错误?

txs72 05-16 02:52

从转换后的SQL语句看,应为只取回一条记录。

sapjax 07-26 07:00

不是DSL,纯python语法的,应该是取回了所有的,然后再切片选取?

roger 11-20 09:16

不是,只取第一条,没有objects.all()啊

chris 06-20 15:24

Publisher.objects.order_by('name')[1] 如果是這樣呢,是否代表 SELECT id, name, address, city, state_province, country, website FROM books_publisher ORDER BY name OFFSET 2 LIMIT 1; 我看會跑,但是官方文件似乎沒有特別說明這點 還是有語法可以看這行執行的SQL?

牛三金 04-22 08:40

Djago应该是先将Python语法转换成标准的SQL语句,再去操作数据库。

对这一段的评论会显示在这里
>>> Publisher.objects.order_by('name')[0]
<Publisher: Apress>
对这一段的评论会显示在这里

这相当于:

对这一段的评论会显示在这里
SELECT id, name, address, city, state_province, country, website
FROM books_publisher
ORDER BY name
LIMIT 1;
对这一段的评论会显示在这里

类似的,你可以用Python的range-slicing语法来取出数据的特定子集:

baichenjia 04-17 10:23

Python 中 list 结构的切片方法

对这一段的评论会显示在这里
>>> Publisher.objects.order_by('name')[0:2]
对这一段的评论会显示在这里

这个例子返回两个对象,等同于以下的SQL语句:

对这一段的评论会显示在这里
SELECT id, name, address, city, state_province, country, website
FROM books_publisher
ORDER BY name
OFFSET 0 LIMIT 2;
xepher 12-15 07:19

OFFSET 0 LIMIT 2; 这一行在mysql中不能运行,应该改为 LIMIT 2 OFFSET 0;

jxl 11-18 22:37

回楼上,这些语句并不是mysql为例的。

俞立夫 04-01 03:38

意思是从0开始选2个

对这一段的评论会显示在这里

注意,不支持Python的负索引(negative slicing):

对这一段的评论会显示在这里
>>> Publisher.objects.order_by('name')[-1]
Traceback (most recent call last):
  ...
AssertionError: Negative indexing is not supported.
sapjax 07-26 07:04

看来确实不是先查找所有的再切片

敲完回车,心里就有点忐忑,得到正确反馈之后就知道python静静为我做了很多 02-01 08:47

July 02-23 12:32

负索引是个很有趣的东西,要是支持就好了

syshu 10-11 06:44

不明白为啥不支持负索引。 order_by()方法返回一个Publish的数组,既然是数组那不是应该支持数组所有的特性吗?求懂的人指点迷津。

取最后一个可以这么写 Publisher.objects.last() 10-19 07:44

jowhok 12-29 06:11

@syshu 这里实际上并不是python的列表对象操作,而是将整个语句转换成sql直接检索数据库,所以是没有负索引的,上面已经讲的很清楚了

Ignora 01-25 06:35

这样的话就像之前有人说的话,如果需要切取一段的话,切片和排序的顺序会对结果产生影响

Ignora 01-25 06:36

而django只支持一种方式,用python另行操作也许好一点

对这一段的评论会显示在这里

虽然不支持负索引,但是我们可以使用其他的方法。 比如,稍微修改 order_by() 语句来实现:

对这一段的评论会显示在这里
>>> Publisher.objects.order_by('-name')[0]
对这一段的评论会显示在这里

更新多个对象

对这一段的评论会显示在这里

在“插入和更新数据”小节中,我们有提到模型的save()方法,这个方法会更新一行里的所有列。 而某些情况下,我们只需要更新行里的某几列。

xepher 12-15 07:23

这个方法会更新一行里的所有列。 而某些情况下,我们只需要更新行里的某几列。 改为 这个方法 只 会更新一行里的所有列。 而某些情况下,我们 却 需要更新行里的某几列。 是否更恰当

yuwen 01-18 08:12

“却”是可以省略的,但“只”的意思省略了不好。 自己读读看哪个更通顺吧。 当然可以一起用,“却只需要”。

Hillfree 04-22 15:10

在Django1.5中,可以采用类似:product.save(update_fields=['name']) 的方式来强制更新指定字段。

对这一段的评论会显示在这里

例如说我们现在想要将Apress Publisher的名称由原来的”Apress”更改为”Apress Publishing”。若使用save()方法,如:

对这一段的评论会显示在这里
>>> p = Publisher.objects.get(name='Apress')
>>> p.name = 'Apress Publishing'
>>> p.save()
yaoxiao16 05-07 03:02

不能用Publisher.objects.get(name='Apress').name = 'Apress Publishing' Publisher.objects.get(name='Apress').save()更新对象。为什么?

戚伟杰 08-01 08:04

因为两次返回的是同一个对象的不同拷贝啊,亲,你第一行获取了一个对象并且改变了值,但是没有保存到数据库里面,第二行由获取了该对象,但是没有任何修改就save了

mihello 08-04 15:16

LS 正解!

楼上√ 11-01 04:29

WY 08-30 00:53

@yaoxiao16 你的第一行你没有save()到db 所以对象内容没有变化。

WY 08-30 00:56

@yaoxiao16 可以直接使用 Publisher.objects.filter(name="Apress").update(name="Apress publishing"). 这样就不用创建对象的引用了

对这一段的评论会显示在这里

这等同于如下SQL语句:

对这一段的评论会显示在这里
SELECT id, name, address, city, state_province, country, website
FROM books_publisher
WHERE name = 'Apress';

UPDATE books_publisher SET
    name = 'Apress Publishing',
    address = '2855 Telegraph Ave.',
    city = 'Berkeley',
    state_province = 'CA',
    country = 'U.S.A.',
    website = 'http://www.apress.com'
WHERE id = 52;
对这一段的评论会显示在这里

(注意在这里我们假设Apress的ID为52)

对这一段的评论会显示在这里

在这个例子里我们可以看到Django的save()方法更新了不仅仅是name列的值,还有更新了所有的列。 若name以外的列有可能会被其他的进程所改动的情况下,只更改name列显然是更加明智的。 更改某一指定的列,我们可以调用结果集(QuerySet)对象的update()方法: 示例如下:

mr.liu 08-04 06:39

大家注意,update是结果集(QuerySet)的方法,get没法使用,它返回的是单个对象,没有此方法。

leefuns 10-28 07:28

如果要使用update()方法那不是需要得到每一个Publisher对象的id?

adam 01-09 10:57

update()不一定要知道id,知道name,address,city都可以,比如通过filter(name=‘Apress’).update(name=‘Apress Publishing’)

对这一段的评论会显示在这里
>>> Publisher.objects.filter(id=52).update(name='Apress Publishing')
对这一段的评论会显示在这里

与之等同的SQL语句变得更高效,并且不会引起竞态条件。

对这一段的评论会显示在这里
UPDATE books_publisher
SET name = 'Apress Publishing'
WHERE id = 52;
TTTsand 11-14 08:41

更新数据后,所有数据的ID都乱了,如何重新对数据进行排列呢?

对这一段的评论会显示在这里

update()方法对于任何结果集(QuerySet)均有效,这意味着你可以同时更新多条记录。 以下示例演示如何将所有Publisher的country字段值由’U.S.A’更改为’USA’:

li3p 01-07 02:55

为什么update放到了QuerySet上,delete却要放在对象本身?

ode2free 04-09 17:15

试了一下,update()和delete()都可以用在QuerySet或者对象本身上 比如 p.update()

Kuner 09-19 10:53

@ode2free //p.updata()不可以吧

xepher 12-15 07:29

@Kuner 确实不可以

gaobjr 03-11 05:08

回1楼:这几个例子的update和delete都作用于QuerySet了,没看到delete作用于模型本身啊?你的疑问是哪里来的?

sapjax 07-26 07:18

>>> p = Publisher.objects.get(name="O'Reilly") >>> p.delete() 这里确实是作用于对象本身了

xiaoxu 01-30 11:58

p.update(country='USA') AttributeError: 'Publisher' object has no attribute 'update'

hLongQ 05-31 03:34

如果只是要把那些country='U.S.A'的记录集更新为'USA'那应该怎么写啊?

PaulZhao 08-06 10:31

@hLongQ 跟上面一样,用filter把country='U.S.A'的过滤出来,update一下。Publisher.objects.filter(country ='U.S.A').update(country ='USA')

qinchx 04-01 04:07

只有结果集拥有update方法,单个对象则没有这个方法。比如Publisher.objects.get(name='Apress').update(country='USA')会报错。

adamee 05-21 07:25

>>> Publisher.objects.get(name='Apress').update(country='USA') Traceback (most recent call last): File "<console>", line 1, in <module> AttributeError: 'Publisher' object has no attribute 'update' 运行结果放下面

morphling 11-05 02:33

如上,update只针对“结果集”,如果是get()返回的就不能update

对这一段的评论会显示在这里
>>> Publisher.objects.all().update(country='USA')
2
ode2free 05-10 00:52

there should be : Publisher.objects.filter(country='U.S.A').update(country='USA')

yuwen 01-18 08:14

看看上文再决定吧。

python-xiyuan 05-11 08:22

In [12]: Publisher.objects.all().update(country='USA') Out[12]: 4L 很纳闷。。。

jw 08-13 08:34

出现的数字指的是更新的总数,ls应该是有4个项的county值是U.S.A.吧

对这一段的评论会显示在这里

update()方法会返回一个整型数值,表示受影响的记录条数。 在上面的例子中,这个值是2。

xepher 12-15 07:31

1.3.1 显示的是 2L

atlas 09-16 08:03

@xepher 有多少条记录受到影响就会显示几条记录.

对这一段的评论会显示在这里

删除对象

对这一段的评论会显示在这里

删除数据库中的对象只需调用该对象的delete()方法即可:

sss 03-20 08:40

删除成功后会返回什么数据?

Chaney 05-14 08:03

不会显示。 >>> type(Publisher.objects.get(name ='Crayon').delete()) <type 'NoneType'>

对这一段的评论会显示在这里
>>> p = Publisher.objects.get(name="O'Reilly")
>>> p.delete()
>>> Publisher.objects.all()
[<Publisher: Apress Publishing>]
对这一段的评论会显示在这里

同样我们可以在结果集上调用delete()方法同时删除多条记录。这一点与我们上一小节提到的update()方法相似:

qinchx 04-01 04:10

delete可用于单个对象也可用于结果集。

Chaney 05-14 08:06

说法还是不要说单个,多个。本质是,如filter,all,这些,返回的类型是QuerySet >>> type(Publisher.objects.filter(name ='Crayon')) <class 'django.db.models.query.QuerySet'> 而get的话返回类型是Publisher,是个对象, >>> type(Publisher.objects.get(name ='Crayon')) <class 'books.models.Publisher'>

对这一段的评论会显示在这里
>>> Publisher.objects.filter(country='USA').delete()
>>> Publisher.objects.all().delete()
>>> Publisher.objects.all()
[]
对这一段的评论会显示在这里

删除数据时要谨慎! 为了预防误删除掉某一个表内的所有数据,Django要求在删除表内所有数据时显示使用all()。 比如,下面的操作将会出错:

stranbird 05-09 13:32

*显式

吉吉国王 08-14 03:52

呜哈哈哈~又看了一章

对这一段的评论会显示在这里
>>> Publisher.objects.delete()
Traceback (most recent call last):
  File "<console>", line 1, in <module>
AttributeError: 'Manager' object has no attribute 'delete'
对这一段的评论会显示在这里

而一旦使用all()方法,所有数据将会被删除:

对这一段的评论会显示在这里
>>> Publisher.objects.all().delete()
对这一段的评论会显示在这里

如果只需要删除部分的数据,就不需要调用all()方法。再看一下之前的例子:

对这一段的评论会显示在这里
>>> Publisher.objects.filter(country='USA').delete()
对这一段的评论会显示在这里

下一章

对这一段的评论会显示在这里

通过本章的学习,你应该可以熟练地使用Django模型来编写一些简单的数据库应用程序。 在第十章我们将讨论Django数据库层的高级应用。

猪头哥哥 12-01 07:00

这一章的内容很详细了,有些老的api也被批注指出了 感谢各位

电饭锅 02-06 13:37

加油哦~

对这一段的评论会显示在这里

一旦你定义了你的模型,接下来就是要把数据导入数据库里了。 你可能已经有现成的数据了,请看第十八章以获得有关如何集成现有数据库的建议。 也可能数据是用户提供的,第七章中还会教你怎么处理用户提交的数据。

对这一段的评论会显示在这里

有时候,你和你的团队成员也需要手工输入数据,这时候如果有一个基于Web的数据输入和管理的界面就会很有帮助。 下一章将介绍解决手工录入问题的方法——Django管理界面。

对这一段的评论会显示在这里

the GNU Free Document License Hosting graciously provided by

对这一段的评论会显示在这里