Django 数据库连接使用
整个项目已经放在Github上, 随时更新, 项目地址
Django Model
- 每一个
Django Model
都继承自django.db.models.Model
- 在
Model
当中每一个属性attribute
都代表一个database field - 通过
Django Model API
可以执行数据库的增删改查, 而不需要写一些数据库的查询语句
设置数据库
Django项目建成后, 默认设置了使用SQLite数据库, 在my_blog/my_blog/setting.py中可以查看和修改数据库设置:
DATABASES = {'default': {'ENGINE': 'django.db.backends.sqlite3','NAME': os.path.join(BASE_DIR, 'db.sqlite3'),}
}
还可以设置其他数据库, 如MySQL, PostgreSQL
, 现在为了简单, 使用默认数据库设置
.配置Django项目的settings.py文件,修改DATABASES配置项如下:
DATABASES = {
'default':{
'ENGINE':'django.db.backends.postgresql_psycopg2',
'NAME':'testdb',#数据库名字
'USER':'python3learner',#登录用户名
'PASSWORD':'123456789',
'HOST':'127.0.0.1',#数据库IP地址
'PORT':'5432',
}
}
创建models
在my_blog/article/models.py下编写如下程序:
from django.db import models# Create your models here.
class Article(models.Model) :title = models.CharField(max_length = 100) #博客题目category = models.CharField(max_length = 50, blank = True) #博客标签date_time = models.DateTimeField(auto_now_add = True) #博客日期content = models.TextField(blank = True, null = True) #博客文章正文def __unicode__(self) :return self.titleclass Meta: #按时间下降排序ordering = ['-date_time']
其中__unicode__(self)
函数Article对象要怎么表示自己, 一般系统默认使用<Article: Article object>
来表示对象, 通过这个函数可以告诉系统使用title字段来表示这个对象
CharField
用于存储字符串, max_length设置最大长度TextField
用于存储大量文本DateTimeField
用于存储时间, auto_now_add设置True表示自动设置对象增加时间
同步数据库
$ python manage.py migrate #命令行运行该命令
因为我们已经执行过该命令会出现如下提示
Operations to perform:Apply all migrations: admin, contenttypes, sessions, auth
Running migrations:No migrations to apply.Your models have changes that are not yet reflected in a migration, and so won't be applied.Run 'manage.py makemigrations' to make new migrations, and then re-run 'manage.py migrate' to apply them.
那么现在需要执行下面的命令
$ python manage.py makemigrations
#得到如下提示
Migrations for 'article':0001_initial.py:- Create model Article
现在重新运行以下命令
$ python manage.py migrate
#出现如下提示表示操作成功
Operations to perform:Apply all migrations: auth, sessions, admin, article, contenttypes
Running migrations:Applying article.0001_initial... OK
migrate命令按照app顺序建立或者更新数据库, 将
models.py
与数据库同步
Django Shell
现在我们进入Django中的交互式shell来进行数据库的增删改查等操作
$ python manage.py shell
Python 3.4.2 (v3.4.2:ab2c023a9432, Oct 5 2014, 20:42:22)
[GCC 4.2.1 (Apple Inc. build 5666) (dot 3)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
(InteractiveConsole)
>>>
这里进入Django的shell和python内置的shell是非常类似的
>>> from article.models import Article
>>> #create数据库增加操作
>>> Article.objects.create(title = 'Hello World', category = 'Python', content = '我们来做一个简单的数据库增加操作')
<Article: Article object>
>>> Article.objects.create(title = 'Django Blog学习', category = 'Python', content = 'Django简单博客教程')
<Article: Article object>>>> #all和get的数据库查看操作
>>> Article.objects.all() #查看全部对象, 返回一个列表, 无对象返回空list
[<Article: Article object>, <Article: Article object>]
>>> Article.objects.get(id = 1) #返回符合条件的对象
<Article: Article object>>>> #update数据库修改操作
>>> first = Article.objects.get(id = 1) #获取id = 1的对象
>>> first.title
'Hello World'
>>> first.date_time
datetime.datetime(2014, 12, 26, 13, 56, 48, 727425, tzinfo=<UTC>)
>>> first.content
'我们来做一个简单的数据库增加操作'
>>> first.category
'Python'
>>> first.content = 'Hello World, How are you'
>>> first.content #再次查看是否修改成功, 修改操作就是点语法
'Hello World, How are you'>>> #delete数据库删除操作
>>> first.delete()
>>> Article.objects.all() #此时可以看到只有一个对象了, 另一个对象已经被成功删除
[<Article: Article object>]
在models中第一次创建models类,如图所示: 下面使用python manage.py makemigrations 命令: 红线框中表示在blog应用目录下的migations的文件下多了一个001的文件,我们来看看这个文件中的具体内容是什么: 这个文件里面的内容表示我们创建了一个Employee这个模型类,并且指出这个类的成员属性id,name,以及他们的属性,我们知道在models.py创建模型类,其中一个模型类对应的是一张数据表,来看看执行了刚刚的那条命令止之后数据库中有没有发生什么变化,我们想要的数据表是不是已经创建好了,如下图所示: 可以看到数据库里面并没有我们想要创建的数据表,那刚刚那条命令具体执行了什么语句,我们可以使用python manage.py sqlmugrate appname 文件名 进行查看: 和0001文件中的内容是一致的,下面开始执行python manage.py migrate,如下图: 下面再看一下数据库:我们发下执行完指一条命令之后,我们所想要创建的数据表出现了,对应的字段也出现了 到这里我们差不多就知道了,python manage.py makemigrations这个命令是记录我们对models.py的所有改动,并且将这个改动迁移到migrations这个文件下生成一个文件例如:0001文件,如果你接下来还要进行改动的话可能生成就是另外一个文件不一定都是0001文件,但是这个命令并没有作用到数据库,这个刚刚我们在上面的操作过程之后已经看到了,而当我们执行python manage.py migrate 命令时 这条命令的主要作用就是把这些改动作用到数据库也就是执行migrations里面新改动的迁移文件更新数据库,比如创建数据表,或者增加字段属性 另外一个需要注意的是这两个命令默认情况下是作用于全局,也就是对所有最新更改的models或者migrations下面的迁移文件进行对应的操作,如果要想仅仅对部分app进行作用的话 则执行如下命令:python manage.py makemigrations appname,python manage.py migrate appname,如果要想精确到某一个迁移文件则可以使用:python manage.py migrate appname 文件名
打开 Linux 或 MacOS 的 Terminal (终端)直接在 终端中输入这些命令(不是 python 的 shell中)如果是 windows 用 cmd(开始 搜索 cmd 或者 快捷键 win + R,输入 cmd) 直接在 cmd 上操作。
1. 新建一个 django project
1
2
|
django-admin.py startproject project_name
特别是在 windows 上,如果报错,尝试用 django-admin 代替 django-admin.py 试试
|
注意 project_name 是自己的项目名称,需要为合法的 Python 包名,如不能为 1a 或 a-b。
2. 新建 app
要先进入项目目录下,cd project_name 然后执行下面的命令(下同,已经在项目目录下则不需要 cd project_name)
1
2
|
python manage.py startapp app_name
或 django-admin.py startapp app_name
|
一般一个项目有多个app, 当然通用的app也可以在多个项目中使用。
与项目名类似 app name 也需要为合法的 Python 包名,如 blog,news, aboutus 等都是合法的 app 名称。
3. 创建数据库表 或 更改数据库表或字段
1
2
3
4
5
6
7
8
9
|
Django 1.7.1及以上 用以下命令
# 1. 创建更改的文件
python manage.py makemigrations
# 2. 将生成的py文件应用到数据库
python manage.py migrate
旧版本的Django 1.6及以下用
python manage.py syncdb
|
这种方法可以在SQL等数据库中创建与models.py代码对应的表,不需要自己手动执行SQL。
备注:对已有的 models 进行修改,Django 1.7之前的版本的Django都是无法自动更改表结构的,不过有第三方工具 south,详见 Django 数据库迁移 一节。
4. 使用开发服务器
开发服务器,即开发时使用,一般修改代码后会自动重启,方便调试和开发,但是由于性能问题,建议只用来测试,不要用在生产环境。
1
2
3
4
5
6
7
8
9
10
11
|
python manage.py runserver
# 当提示端口被占用的时候,可以用其它端口:
python manage.py runserver 8001
python manage.py runserver 9999
(当然也可以 kill 掉占用端口的进程,具体后面有讲,此处想知道的同学可查下 lsof 命令用法)
# 监听机器所有可用 ip (电脑可能有多个内网ip或多个外网ip)
python manage.py runserver 0.0.0.0:8000
# 如果是外网或者局域网电脑上可以用其它电脑查看开发服务器
# 访问对应的 ip加端口,比如 http://172.16.20.2:8000
|
5. 清空数据库
1
|
python manage.py flush
|
此命令会询问是 yes 还是 no, 选择 yes 会把数据全部清空掉,只留下空表。
6. 创建超级管理员
1
2
3
4
5
6
|
python manage.py createsuperuser
# 按照提示输入用户名和对应的密码就好了邮箱可以留空,用户名和密码必填
# 修改 用户密码可以用:
python manage.py changepassword username
|
7. 导出数据 导入数据
1
2
|
python manage.py dumpdata appname > appname.json
python manage.py loaddata appname.json
|
关于数据操作 详见:数据导入数据迁移,现在了解有这个用法就可以了。
8. Django 项目环境终端
1
|
python manage.py shell
|
如果你安装了 bpython 或 ipython 会自动用它们的界面,推荐安装 bpython。
这个命令和 直接运行 python 或 bpython 进入 shell 的区别是:你可以在这个 shell 里面调用当前项目的 models.py 中的 API,对于操作数据,还有一些小测试非常方便。
9. 数据库命令行
1
|
python manage.py dbshell
|
Django 会自动进入在settings.py中设置的数据库,如果是 MySQL 或 postgreSQL,会要求输入数据库用户密码。
在这个终端可以执行数据库的SQL语句。如果您对SQL比较熟悉,可能喜欢这种方式。
10. 更多命令
1
|
终端上输入 python manage.py 可以看到详细的列表,在忘记子名称的时候特别有用。
|
更详细的介绍,点击对应版本去官网查看: 1.11 1.8 dev
Django 数据库连接使用相关推荐
- django html数据库连接,Django数据库连接的问题
多线程运行项目.有N个工作线程从DB中获取jobs,并把结果写回DB. 项目运行一段时间后,发现数据库连接耗尽了,幸好内存大,然后一直往上调,最后连接数都上8000多.耗尽连接数的时候,postgre ...
- Django数据库连接丢失问题
问题 在Django中使用mysql偶尔会出现数据库连接丢失的情况,错误通常有如下两种 1. OperationalError: (2006, 'MySQL server has gone away' ...
- Django数据库连接池(mysql)
都知道django每次请求都会连接数据库和释放数据库连接.Django为每个请求使用新的数据库连接.一开始这个方法行得通.然而随着服务器上的负载的增加,创建/销毁连接数据库开始花大量的时间.要避免这个 ...
- Python+Django电影推荐系统搭建
文章目录 1. 新建虚拟环境 2. 数据库设置 2.1 安装PostGreSQL 2.2 为MovieGEEK创建数据库 2.3 安装Python数据库驱动程序 2.4 配置Django数据库连接以连 ...
- [Python + Django] Web在线考试管理系统设计及代码实现
本文最终实现一个Web在线考试管理系统,可作为Python Web,Django的练手项目,也可以作为计算机毕设参考项目. 源码获取方式:[Django]pythonweb学生信息及考试管理系统毕业设 ...
- [Python+Django]Web学生信息管理系统数据库设计及系统实现
本文我们完成数据的设计,并通过Django框架完成数据库构建同时利用Django框架模式实现学生信息管理系统的功能. 简单的包装下毕设应该没问题了. Python,Mysql,Pycharm的安装本文 ...
- python相关的一些坑
1. 报错:-bash: /usr/bin/yum: /usr/bin/python: bad interpreter: No such file or directory python多版本造成额问 ...
- python django并发访问挂掉,解决django高并发时数据库连接量过大的问题(实现连接池的方法)...
Django默认每访问一次数据库都会创建一个新的数据库连接,执行完数据库操作后再关闭连接.这在高并发的场景下会导致连接数不断增多,最终出现"too many connections" ...
- Django View使用装饰器捕获数据库连接异常
"来不及解释了",直接上代码. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 ...
最新文章
- 实验1 命令解释程序的编写
- Linux睡眠唤醒机制分析--以IMX6UL为例
- SAP用户出口(exit)问题--数据源增强
- 大佬终于把鸿蒙OS讲明白了,收藏了!
- WordPress博客系统的安全
- print_w php,THINKPHP的dump打印数组函数,输出在浏览器非常友好。
- Interlocked..::.Add 方法
- 汇编里的IMPORT和EXPORT
- 高可用性及容灾的几个衡量指标
- Android ProGuard 还原堆栈
- Java 项目实战 坦克大战(一)--准备
- oracle goldengate director,Oracle GoldenGate Director安装和配置
- usb_modeswitch下载与安装
- 基于QT和DCMTK的Dicom 图像浏览器---收尾二
- android官方原生主题,原生Android可以更换系统主题吗?
- DCDC中电感的计算
- 一本通 1194:移动路线
- 入门级蛋白质结构查看PyMol的使用——PyMol常用命令
- 【POJ 2719 --- Faulty Odometer】
- 特发性震颤为什么在喝酒后症状消失?
热门文章
- Xib与Nib区别联系
- Seneca:NodeJS 微服务框架入门(一)
- 电子商务案例分析php,2020知到《西安邮电大学网课电子商务案例分析》单元测试答案2020高校邦《ThinkPHP框架技术》答案免费...
- 使用electron-builder --win --x64 命令 app-builder-bin\win\x64\app-builder.exe 报错
- 可以观看CCTV-5高清直播的网站-天天直播_我是亲民_新浪博客
- 美团面试全流程详解(一面 + 二面)
- 关于设计解决空洞卷积中‘gridding effect‘问题的几个原则(简单易懂)
- 解决Firefox浏览器无法打开在简书的任何网址
- C语言初学基础篇:编译型语言和解释型语言
- 【通知】Linux glibc 中发现幽灵漏洞,请及时修复