`

Diango Model API

阅读更多
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


0
0
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics