查看ubuntu已安装的所有软件:
1
2
|
dpkg -l
dpkg -l |
grep
mysql
|
查看软件安装的路径
1
|
dpkg -L |
grep
mysql
|
查看开机启动的软件,需要额外安装插件:
1
2
3
4
5
6
|
sudo
apt-get
install
rcconf
rcconf
更能全一点的:
sudo
apt-get
install
sysv-rc-conf
sysv-rc-conf
|
安装mysql:
1
2
3
|
# apt-get install python-setuptools libmysqld-dev libmysqlclient-dev
# easy_install mysql-python
或者
#pip install mysql-python
|
django setting配置:
1
2
3
4
5
6
7
8
9
10
|
DATABASES
=
{
'default'
: {
'ENGINE'
:
'django.db.backends.mysql'
,
'NAME'
:
'books'
,
#你的数据库名称
'USER'
:
'root'
,
#你的数据库用户名
'PASSWORD'
: '',
#你的数据库密码
'HOST'
: '',
#你的数据库主机,留空默认为localhost
'PORT'
:
'3306'
,
#你的数据库端口
}
}
|
在model模块中添加如下建表语句:
vi app/models.py
1
2
|
class
test1(models.Model):
name
=
models.CharField(max_length
=
20
)
#定义的字段name为字段名
|
model模块在app中,其中定义的类名就是表名(但是在数据库中的表名会以app为前缀,例如项目为app则实际创建的表名为app_test1),CharField相当于varchar,DateField相当于datetime,max_length 相当于参数限定长度“varchar(20)”
1
2
|
python manage.py makemigrations
#查看表有哪些更改
python manage.py migrate app
#创建表结构
|
注意:这里如果之前已经同步过一次数据,现在又要添加字段,会报错,解决办法是在字段后面添加
null=True
例如:
ages=models.CharField(max_length=10,null=True)
为表添加数据:django需要查询或者更新表时,需先导入表名才能获取表内的数据。
1
2
3
4
5
|
from
app.models
import
test1
def
huoqu(request):
a
=
test1(name
=
'wangjiadongge'
)
#test1为表名,name为字段名。
a.save()
return
HttpResponse(
"数据添加成功!"
)
|
数据操作:
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
|
#获取数据
def
huoqu(request):
#通过objects这个模型管理器的all()获得所有数据行,相当于SQL中的SELECT * FROM
list
=
test1.objects.
all
()
#filter相当于SQL中的WHERE,可设置条件过滤结果
list1
=
test1.objects.
filter
(
id
=
1
)
#获取单个对象
list2
=
test.objects.get(
id
=
1
)
#限制返回的数据 相当于 SQL 中的 OFFSET 0 LIMIT 2;
test1.objects.order_by(
'name'
)[
0
:
2
]
#数据排序
test1.objects.order_by(
"id"
)
#上面的方法可以连锁使用
test1.objects.
filter
(name
=
"runoob"
).order_by(
"id"
)
#输出所有数据
for
var
in
list
: response1
+
=
var.name
+
" "
response
=
response1
return
HttpResponse(
"<p>"
+
response
+
"</p>"
)
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
#更新数据
# -*- coding: utf-8 -*-
from
django.http
import
HttpResponse
from
app.models
import
test1
def
testdb(request):
#修改其中一个id=1的name字段,再save,相当于SQL中的UPDATE
test
=
test1.objects.get(
id
=
1
)
test.name
=
'Google'
test.save()
#另外一种方式
#test1.objects.filter(id=1).update(name='Google')
# 修改所有的列
# test1.objects.all().update(name='Google')
return
HttpResponse(
"<p>修改成功</p>"
)
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
#删除数据
# -*- coding: utf-8 -*-
from
django.http
import
HttpResponse
from
app.models
import
Test
# 数据库操作def testdb(request): # 删除id=1的数据
test1
=
Test.objects.get(
id
=
1
)
test1.delete()
#另外一种方式
#test1.objects.filter(id=1).delete()
#删除所有数据
#test1.objects.all().delete()
return
HttpResponse(
"<p>删除成功</p>"
)
|
#django在前端中展示从数据库中获取到的数据:
html:
1
2
3
|
{% for a in names %}
id={{ a.id }}:name={{ a.name }}:sex={{ a.sex }}
{% endfor %}
|
注意:这里展示的数据必须是单条数据,若是展示整个数据库的内容必须是逐条,整个取的话会导致出现QuerySet [<test2: test2 object>这种数据。
django:
1
2
3
4
5
6
7
|
def
testdb(request):
#list = test2.objects.all()
names
=
test2.objects.
filter
(
id
=
1
)
print
names
#return HttpResponse('this is test select mysql!')
return
render_to_response(
'a.html'
,
locals
())
#locals()是获取整个本地变量
|
-------------------分割线--------------------
#django经典例子:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
from
django.db
import
models
#导入models模块
#表名:
class
publisher(models.Model):
#定义表名为publish
name
=
models.CharField(max_length
=
30
)
#表字段name
address
=
models.CharField(max_length
=
50
)
#表字段address
city
=
models.CharField(max_length
=
60
)
#表字段city
state_province
=
models.CharField(max_length
=
30
)
county
=
models.CharField(default
=
"CN"
,max_length
=
50
)
website
=
models.URLField()
#表字段website,字段类型为地址
表名:
class
author(models.Model):
first_name
=
models.CharField(max_length
=
30
)
last_name
=
models.CharField(max_length
=
40
)
email
=
models.EmailField(blank
=
True
)
#字段名字为email,字段类型为email
#表名:
class
book(models.Model):
title
=
models.CharField(max_length
=
100
)
#字段名为title,字段类型为vachar
authors
=
models.ManyToManyField(author)
#字段名为author,字段类型为ManyToManyField
publisher
=
models.ForeignKey(publisher)
#关联外部表publisher
publication_date
=
models.DateField()
#字段名为publication_date,类型为日期类型
|
1
2
|
python manage.py makemigrations
#查看表有哪些更改
python manage.py migrate
#同步数据库
|
1
2
3
4
5
6
|
#运行上面这条命令出现的错误:
#Apply all migrations: admin, app, auth, contenttypes, sessions
#Running migrations:
#解决:这个错误是因为已经同步过一次数据库引起的,如果表中的字段要增加,需要添加null=True
#比如:ages=models.CharField(max_length=10,null=True)
#如果是新建一个表,则要删除app中migrations文件夹(一般不需要)。
|
#如果需要用户和密码,则执行:
1
2
|
python manage.py createsuperuser
#创建用户
python manage.py changepassword
#更改密码
|
#练习在python交互模式下操作数据库:
1
2
|
.
/
manage.py shell
#进入django变量的交互器
from
app.models
import
publisher
#导入publisher数据库。
|
#插入一条数据:
1
|
p1
=
publisher(name
=
'qinghua university'
,address
=
'wudaokou'
,city
=
'beijing'
,state_province
=
'beijing'
,county
=
'china'
,website
=
'www.qinghua.com'
)
|
p1.name #查看插入的name
p1.address #查看插入的address
p1.save() #插入的数据写入数据库中
#更新一条数据:
1
2
|
p1.address
=
"qinghualu"
p1.save()
|
#查看所有的数据
在models模块中,建表语句下面添加如下:
1
2
|
def
__unicode__(
self
):
return
self
.name,
self
.address
|
然后再去交换窗口查看所有数据:
1
|
publisher.objects.
all
()
|
#查询国家等于中国的一条数据:
1
|
publisher.objects.
filter
(country
=
"china"
)
|
#查询出来的数据进行更改:
1
2
3
|
a
=
publisher.objects.get(name
=
"beijing"
)
a.county
=
"USA"
a.save()
|
#高效的更新数据方式,并且无需save:
1
|
publisher.objects.
filter
(
id
=
1
).update(name
=
"qingdaodaxue"
)
|
#在浏览器中打开后台管理数据库界面:
http://192.168.110.106/admin/
账号就是同步数据库时创建的用户名和密码,登陆进去。
在app下创建一个admin.py的文件
vi admin.py
1
2
3
4
5
|
from
django.contrib
import
admin
from
app.models
import
publisher,author,book
admin.site.register(publisher)
admin.site.register(author)
admin.site.register(book)
|
完成后,重新打开页面。
#django中引用bootstrap:
在setting.py中:
MEDIA_ROOT='/root/project/statics/bootstrap/'
在url.py中:
from django.conf import settings
--------------------------------------分割线------------------------------------
本文转自 王家东哥 51CTO博客,原文链接:http://blog.51cto.com/xiaodongge/1903793