Django 连接数据库

$2 Django 数据建模

2.1 Django进行数据库查询的方法
1)在视图中进行数据库的查询
在视图中使用MySQLdb类库连接MySQL数据库,然后进行数据库的操作。
eg:

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',{'name':names})

缺点:1.多个视图都需要数据库操作,需要进行多次数据库连接,导致代码重复
2.sql语句硬编码在代码当中
3.更换数据库困难

2)通过models.py创建数据模型
步骤:1.数据库配置:在setting.py文件中配置数据库 (详细配置:http://blog.csdn.net/xinyoulin/article/details/48573357)
2.创建应用程序:Python manage.py startapp books ('books'是应用程序名称)
3.定义数据模型:在新创建的books应用程序中的models.py中定义数据模型
eg:
	from django.db import models 
	
	class Publisher(models.Model): 
		name = models.CharField(maxlength=30) 
		address = models.CharField(maxlength=50) 
		city = models.CharField(maxlength=60) 
		state_province = models.CharField(maxlength=30) 
		country = models.CharField(maxlength=50) 
		website = models.URLField()

4.模型安装:在setting.py文件中,找到INSTALLED_APPS设置,INSTALLED_APPS 告诉 Django 项目哪些 app 处于激活状态
添加books在这个标签中。
5.创建数据库:
校验模型的有效性:python manage.py validate
生成CREATE TABLE语句:python manage.py sqlall books
在数据库中创建表:python manage.py syncdb

注:在创建表的过程中可能会出错,解决方法是将你创建的APP中的migrations文件夹删除。

2.2 数据操作
1)基本数据访问:通过在models.py中创建的数据模型直接访问
eg:
>>> from books.models import Publisher
>>> p1 = Publisher(name='Addison-Wesley', address='75 Arlington Street',
...		city='Boston', state_province='MA', 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>]

2)添加模块的字符串表现
当我们打印整个publisher列表时,我们没有得到想要的有用的信息:
[<Publisher: Publisher object>, <Publisher: Publisher object>]


我们可以简单解决这个问题,只需要添加一个方法 __str__() 到 Publisher 对象。 
__str__() 方法告诉Python要怎样把对象当作字符串来使用。


3)插入和更新数据
插入:创建对象实例,然后利用save()方法进行保存即可保插入到数据库中
更新:对已创建的对象实例中的数据进行修改后,在调用save()方法保存即对数据的更新操作


4)选择对象
查找多有数据的方法:Publisher.objects.all()
对应的SQL语句:
SELECT id, name, address, city, state_province, country, website 
FROM book_publisher;
(注:Django在选择所有数据时并没有使用SELECT*,而是现实列出了所有字段。因为SELECT* 会更慢,而且最重要的是列出所有字段遵循了Python 界的一个信条:明确比不明确好。)

数据过滤:Publisher.objects.filter(name="Apress Publishing")
对应的SQL语句:
SELECT id, name, address, city, state_province, country, website 
FROM book_publisher 
WHERE name = 'Apress Publishing';

模糊匹配:Publisher.objects.filter(name__contains="press"):表示name中包含"press"的记录,
相当于LIKE SQL语句:
SELECT id, name, address, city, state_province, country, website 
FROM book_publisher 
WHERE name LIKE '%press%';

获取单个对象:Publisher.objects.get(name="Apress Publishing")获取单个对象,而不是对象列表


数据排序:方法1:Publisher.objects.order_by("name")通过"name"顺序排序
Publisher.objects.order_by("-name")通过"name"逆序排序
 方法2:在Publisher对象中指定模型的缺省排序方式:
class Meta:
ordering = ["name"]

删除对象:先获取对象,然后调用对象的delete()方法删除
eg:>>> p = Publisher.objects.get(name="Addison-Wesley")
>>> p.delete()

2.3 修改数据库表结构
1.添加字段:
1)在开发环境中执行的步骤:
1.把这个字段添加到你的模型中;
2.运行manage.py sqlall [your app] 会看到模型的新的CREATE TABLE语句。注意新的字段的列定义;
3.启动您的数据库交互shell,执行一个ALTER TABLE语句,添加您的新列。

2)在发布服务器上执行的步骤:
1.启动你的数据库的交互式命令行;
2.执行ALTER TABLE语句;
3.添加字段到你的模型中;
4.重启web服务器以使代码修改生效。

2.删除字段:从你的模型里删除这个字段,并重启web服务器;从你的数据库中删掉该列。


3.删除Many-to-Many字段:删掉你的模型里的ManyToManyField,并且重启Web服务器;删除你数据库里的many-to-many表。


4.删除模型:将此模型从你的models.py文件里删除,并重启web服务器;将此表从你的数据库中删除。






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值