博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
django与mysql交互
阅读量:6469 次
发布时间:2019-06-23

本文共 5851 字,大约阅读时间需要 19 分钟。

查看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):    
   
= 
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

转载地址:http://ynjko.baihongyu.com/

你可能感兴趣的文章
AndroidNote
查看>>
中金易云:为出版社找到下一本《解忧杂货店》
查看>>
Flex布局
查看>>
Material Design之 AppbarLayout 开发实践总结
查看>>
Android中的SurfaceView详解
查看>>
Flutter之MaterialApp使用详解
查看>>
DataBinding最全使用说明
查看>>
原生Js交互之DSBridge
查看>>
Matlab编程之——卷积神经网络CNN代码解析
查看>>
白洋淀周末游
查看>>
三篇文章了解 TiDB 技术内幕 —— 说计算
查看>>
copy strong weak assign的区别
查看>>
OpenCV 入门
查看>>
css 3D transform变换
查看>>
ele表格合并行之后的selection选中
查看>>
正则表达式分解剖析(一文悟透正则表达式)
查看>>
解决UILable标点符号居中的问题
查看>>
HTML5新特性教程
查看>>
SpringBoot 实战 (十七) | 整合 WebSocket 实现聊天室
查看>>
ImageOptim-无损图片压缩Mac版
查看>>