Diango Model API
1. Model
a) 实体类,存放数据,相当于表或映射表.
b) django.db.models.Model的子类.
c) 每一个属性相当于表字段或映射表字段.
示例:
Person 模型,他有名和姓.
from django.db import models
class Person(models.Model):
first_name = models.CharField(max_length=30)
last_name = models.CharField(max_length=30)
那么,对应的表SCHEMA:
CREATE TABLE myapp_person (
"id" serial NOT NULL PRIMARY KEY,
"first_name" varchar(30) NOT NULL,
"last_name" varchar(30) NOT NULL
);
问题1: 如何修改SCHEMA的表名? 如何指定主键?
class Person(models.Model):
class Meta:
db_table = 'myperson'
first_name = models.CharField(primary_key=True,max_length=30)
last_name = models.CharField(max_length=30)
模型创建完好,通过settings.py通知Django:
INSTALLED_APPS = (
#...
'mysite.person',
#...
)
然后同步模型到数据库:
{工程目录}/{应用目录} > manage.py syncdb
2. Field
a) 字段类必须是Field的子类
b) 支持的字段类型有:
CharField DateField IntegerField AutoField FloatField DateTimeField DecimalField EmailField FileField FilePathField ImageField IPAddressField URLField TextField XMLField
ForeignKey ManyToManyField OneToOneField
c) 每个字段对应一个表单控件类型<input type="text" />
d)
字段不能继承
3. Model 方法
class Model(**kwargs)
save(self, *args, **kwargs)
get_absolute_url()
get_FOO_display()
Model.__unicode__()
Model.delete([using=DEFAULT_DB_ALIAS])
Model.pk
Model.full_clean(exclude=None) # 验证字段
Model.clean() # 验证约束
RelatedManager # 外键和多对多关系级联
Manager # 继承关系管理
4. 执行自定义SQL
a) 使用Manager.raw()
Manager.raw(raw_query, params=None, translations=None)
>>> for p in Person.objects.raw('SELECT * FROM myapp_person'):
... print p
b) 直接执行SQL
commit_on_success
def my_custom_sql_view(request, value):
from django.db import connection, transaction
cursor = connection.cursor()
# Data modifying operation
cursor.execute("UPDATE bar SET foo = 1 WHERE baz = %s", [value])
# 事务
transaction.set_dirty()
# Data retrieval operation. This doesn't dirty the transaction,
# so no call to set_dirty() is required.
cursor.execute("SELECT foo FROM bar WHERE baz = %s", [value])
row = cursor.fetchone()
return render_to_response('template.html', {'row': row})
5.
查询数据:
one_entry = Entry.objects.get(pk=1)
all_entries = Entry.objects.all()
过滤器:
Entry.objects.filter(pub_date__year=2006)
Q object
6. 删除:
e.delete()
7. 更新:
update
8. 小结:
Model 模型重要的模块或类:
Models
Field
Manager
QuerySet
Q
Filter
Exclude
9. Django 支持的数据库:
PostgreSQL 8.2 to 8.2.4
MySQL 4.1 5.0
SQLite
Sybase SQL Anywhere
IBM DB2
Microsoft SQL Server 2005
Firebird
ODBC
分享到:
评论