您的位置:首页 > 数据库

Django 模型(数据库):

2017-12-26 15:01 423 查看
Django 模型(数据库):

Django模型是与数据库相关的,与数据库相关的代码一般写在models.py中,

Django支持sqlite3,MySQL,PostgreSQL等数据库,

1.新建项目和应用

django-admin.py startproject learn_models # 新建一个项目

node2:/app#django-admin.py startproject learn_models
node2:/app#

cd learn_models # 进入到该项目的文件夹

node2:/app/learn_models#django-admin.py startapp people
node2:/app/learn_models#

django-admin.py startapp people # 新建一个 people 应用(app)

node2:/app/learn_models#ls
learn_models  manage.py  people

补充:新建app也可以用 python manage.py startapp people,

需要指出的是,django-admin.py是安装Django后多处的一个命令,

并不是运行的当前目录下的django-admin.py(当前目录下也没有),但创建项目会生成一个 manage.py 文件。

2.将我们新建的应用(peolple)添加到settings.py中的INSTALLED_APPS中,也就是告诉Django有这么一个应用:

INSTALLED_APPS = (
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',

'people',
)

3.修改models.py

我们打开people/models.py 文件,修改其中的代码如下:

from django.db import models

class Person(models.Model):
name = models.CharField(max_length=30)
age = models.IntegerField()

我们新建了一个Person类,继承自models.Model,一个人有姓名和年龄

这里用到了两种Field,更多Field

4. 创建数据库

我们来同步一下数据库(我们使用默认的数据库 SQLite3,无需配置)

先 cd 进入 manage.py 所在的那个文件夹下,输入下面的命令

# Django 1.6.x 及以下
python manage.py syncdb

# Django 1.7 及以上的版本需要用以下命令
python manage.py makemigrations
python manage.py migrate

node2:/app/learn_models#python manage.py migrate
Operations to perform:
Apply all migrations: admin, auth, contenttypes, sessions
Running migrations:
Applying contenttypes.0001_initial... OK
Applying auth.0001_initial... OK
Applying admin.0001_initial... OK
Applying admin.0002_logentry_remove_auto_add... OK
Applying contenttypes.0002_remove_content_type_name... OK
Applying auth.0002_alter_permission_name_max_length... OK
Applying auth.0003_alter_user_email_max_length... OK
Applying auth.0004_alter_user_username_opts... OK
Applying auth.0005_alter_user_last_login_null... OK
Applying auth.0006_require_contenttypes_0002... OK
Applying auth.0007_alter_validators_add_error_messages... OK
Applying auth.0008_alter_user_username_max_length... OK
Applying sessions.0001_initial... OK
node2:/app/learn_models#

node2:/app/learn_models#python manage.py makemigrations
Migrations for 'people':
people/migrations/0001_initial.py
- Create model Person
node2:/app/learn_models#python manage.py migrate
Operations to perform:
Apply all migrations: admin, auth, contenttypes, people, sessions
Running migrations:
Applying people.0001_initial... OK
node2:/app/learn_models#

Running migrations:
Applying people.0001_initial... OK

我们会看到,Django 生成了一系列的表,也生成了我们新建的people_person这个表,表示如何使用这个表呢?

5.使用 Django 提供的 QuerySet API

Django 提供了丰富的API,下面演示如何使用它:

learn_models  manage.py  people
node2:/app/learn_models#

(InteractiveConsole)
>>> from people.models import Person
>>> Person.objects.create(name="WeizhongTu", age=24)
<Person: Person object>
>>>

mysql> select * from people_person;
+----+------------+-----+
| id | name       | age |
+----+------------+-----+
|  1 | WeizhongTu |  24 |
+----+------------+-----+
1 row in set (0.00 sec)

我们新建了一个用户weizhongTu那么如何从数据库查询到它呢?

我们用一个.objects.get() 方法查询出来符合条件的对象,但是大家注意到了没有,

查询结果中显示<Person: Person object>,这里并没有显示出与WeizhongTu的相关信息,

如果用户多了就无法知道查询出来的到底是谁,查询结果是否正确

>>> from people.models import Person
>>> Person.objects.get(name="WeizhongTu")
<Person: WeizhongTu>

新建一个对象的方法有以下几种:

1.Person.objects.create(name=name,age=age)

>>> Person.objects.get_or_create(name="WZT", age=23)
(<Person: WZT>, True)

这种方法是防止重复很好的方法,但是速度要相对慢些,返回一个元组,第一个为Person对象,

第二个为True或False,新建时返回的是True,已经存在时返回False

>>> Person.objects.get_or_create(name="WZT", age=23)
(<Person: WZT>, True)
>>> Person.objects.get_or_create(name="WZT", age=23)
(<Person: WZT>, False)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: