当前位置:Gxlcms > 数据库问题 > Django?模型(数据库)

Django?模型(数据库)

时间:2021-07-01 10:21:17 帮助过:18人阅读

Django 模型是与数据库相关的,与数据库相关的代码一般写在 models.py 中,Django 支持 sqlite3, MySQL, PostgreSQL等数据库,只需要在settings.py中配置即可,不用更改models.py中的代码。

大家可以按照我的步骤来开始做:

123django-admin.py startproject learn_models # 新建一个项目cd learn_models                           #进入到该项目的文件夹django-admin.py startapp blog_app           #新建一个 blog_app 应用(app)

1、新建的应用(blog_app)添加到 settings.py 中的 INSTALLED_APPS中,也就是告诉Django有这么一个应用。    vim setting.py    
  1. <code class="language-c" style="font-family: Consolas, ‘Liberation Mono‘, Menlo, Courier, monospace; word-wrap: break-word;"><font face="微软雅黑"><span class="pln" style="color: rgb(72, 72, 76);">    INSTALLED_APPS </span><span class="pun" style="color: rgb(147, 161, 161);">=</span><span class="pln" style="color: rgb(72, 72, 76);"> </span><span class="pun" style="color: rgb(147, 161, 161);">[</span></font></code><code class="language-c" style="font-family: Consolas, ‘Liberation Mono‘, Menlo, Courier, monospace; word-wrap: break-word;"><font face="微软雅黑"><span class="pln" style="color: rgb(72, 72, 76);">    </span><span class="str" style="color: rgb(221, 17, 68);">‘django.contrib.admin‘</span><span class="pun" style="color: rgb(147, 161, 161);">,</span></font></code><code class="language-c" style="font-family: Consolas, ‘Liberation Mono‘, Menlo, Courier, monospace; word-wrap: break-word;"><font face="微软雅黑"><span class="pln" style="color: rgb(72, 72, 76);">    </span><span class="str" style="color: rgb(221, 17, 68);">‘django.contrib.auth‘</span><span class="pun" style="color: rgb(147, 161, 161);">,</span></font></code><code class="language-c" style="font-family: Consolas, ‘Liberation Mono‘, Menlo, Courier, monospace; word-wrap: break-word;"><font face="微软雅黑"><span class="pln" style="color: rgb(72, 72, 76);">    </span><span class="str" style="color: rgb(221, 17, 68);">‘django.contrib.contenttypes‘</span><span class="pun" style="color: rgb(147, 161, 161);">,</span></font></code><code class="language-c" style="font-family: Consolas, ‘Liberation Mono‘, Menlo, Courier, monospace; word-wrap: break-word;"><font face="微软雅黑"><span class="pln" style="color: rgb(72, 72, 76);">    </span><span class="str" style="color: rgb(221, 17, 68);">‘django.contrib.sessions‘</span><span class="pun" style="color: rgb(147, 161, 161);">,</span></font></code><code class="language-c" style="font-family: Consolas, ‘Liberation Mono‘, Menlo, Courier, monospace; word-wrap: break-word;"><font face="微软雅黑"><span class="pln" style="color: rgb(72, 72, 76);">    </span><span class="str" style="color: rgb(221, 17, 68);">‘django.contrib.messages‘</span><span class="pun" style="color: rgb(147, 161, 161);">,</span></font></code><code class="language-c" style="font-family: Consolas, ‘Liberation Mono‘, Menlo, Courier, monospace; word-wrap: break-word;"><font face="微软雅黑"><span class="pln" style="color: rgb(72, 72, 76);">    </span><span class="str" style="color: rgb(221, 17, 68);">‘django.contrib.staticfiles‘</span><span class="pun" style="color: rgb(147, 161, 161);">,</span></font></code><code class="language-c" style="font-family: Consolas, ‘Liberation Mono‘, Menlo, Courier, monospace; word-wrap: break-word;"><font face="微软雅黑"><span class="pln" style="color: rgb(72, 72, 76);">    </span><span class="str" style="color: rgb(221, 17, 68);">‘blog_app‘</span><span class="pun" style="color: rgb(147, 161, 161);">,</span></font></code><code class="language-c" style="font-family: Consolas, ‘Liberation Mono‘, Menlo, Courier, monospace; word-wrap: break-word;"><font face="微软雅黑"><span class="pln" style="color: rgb(72, 72, 76);">    </span><span class="str" style="color: rgb(221, 17, 68);">‘web_app‘</span><span class="pun" style="color: rgb(147, 161, 161);">,</span></font></code><code class="language-c" style="font-family: Consolas, ‘Liberation Mono‘, Menlo, Courier, monospace; word-wrap: break-word;"><font face="微软雅黑"><span class="pln" style="color: rgb(72, 72, 76);">    </span><span class="pun" style="color: rgb(147, 161, 161);">]</span></font></code>


2、blog_app/models.py 文件,修改其中的代码, vim blog_app/model.py
  1. <code class="language-c" style="font-family: Consolas, ‘Liberation Mono‘, Menlo, Courier, monospace; word-wrap: break-word;"><font face="微软雅黑"><span class="pln" style="color: rgb(72, 72, 76);">
  2. from django</span><span class="pun" style="color: rgb(147, 161, 161);">.</span><span class="pln" style="color: rgb(72, 72, 76);">db </span><span class="kwd" style="color: rgb(30, 52, 123);">import</span><span class="pln" style="color: rgb(72, 72, 76);"> models</span></font></code><code class="language-c" style="font-family: Consolas, ‘Liberation Mono‘, Menlo, Courier, monospace; word-wrap: break-word;"><span class="pln" style="color: rgb(72, 72, 76);"><font face="微软雅黑">
  3. </font></span></code><code class="language-c" style="font-family: Consolas, ‘Liberation Mono‘, Menlo, Courier, monospace; word-wrap: break-word;"><font face="微软雅黑"><span class="pln" style="color: rgb(72, 72, 76);">
  4. </span><span class="kwd" style="color: rgb(30, 52, 123);">class</span><span class="pln" style="color: rgb(72, 72, 76);"> </span><span class="typ" style="color: teal;">UserInfo</span><span class="pun" style="color: rgb(147, 161, 161);">(</span><span class="pln" style="color: rgb(72, 72, 76);">models</span><span class="pun" style="color: rgb(147, 161, 161);">.</span><span class="typ" style="color: teal;">Model</span><span class="pun" style="color: rgb(147, 161, 161);">):</span></font></code><code class="language-c" style="font-family: Consolas, ‘Liberation Mono‘, Menlo, Courier, monospace; word-wrap: break-word;"><font face="微软雅黑"><span class="pln" style="color: rgb(72, 72, 76);">        username </span><span class="pun" style="color: rgb(147, 161, 161);">=</span><span class="pln" style="color: rgb(72, 72, 76);"> models</span><span class="pun" style="color: rgb(147, 161, 161);">.</span><span class="typ" style="color: teal;">CharField</span><span class="pun" style="color: rgb(147, 161, 161);">(</span><span class="pln" style="color: rgb(72, 72, 76);">max_length</span><span class="pun" style="color: rgb(147, 161, 161);">=</span><span class="lit" style="color: rgb(25, 95, 145);">50</span><span class="pun" style="color: rgb(147, 161, 161);">)</span></font></code><code class="language-c" style="font-family: Consolas, ‘Liberation Mono‘, Menlo, Courier, monospace; word-wrap: break-word;"><font face="微软雅黑"><span class="pln" style="color: rgb(72, 72, 76);">        email </span><span class="pun" style="color: rgb(147, 161, 161);">=</span><span class="pln" style="color: rgb(72, 72, 76);"> models</span><span class="pun" style="color: rgb(147, 161, 161);">.</span><span class="typ" style="color: teal;">EmailField</span><span class="pun" style="color: rgb(147, 161, 161);">()</span></font></code><code class="language-c" style="font-family: Consolas, ‘Liberation Mono‘, Menlo, Courier, monospace; word-wrap: break-word;"><font face="微软雅黑"><span class="pln" style="color: rgb(72, 72, 76);">        memo </span><span class="pun" style="color: rgb(147, 161, 161);">=</span><span class="pln" style="color: rgb(72, 72, 76);"> models</span><span class="pun" style="color: rgb(147, 161, 161);">.</span><span class="typ" style="color: teal;">TextField</span><span class="pun" style="color: rgb(147, 161, 161);">()</span></font></code><code class="language-c" style="font-family: Consolas, ‘Liberation Mono‘, Menlo, Courier, monospace; word-wrap: break-word;"><span class="pun" style="color: rgb(147, 161, 161);"><font face="微软雅黑">  </font></span></code><code class="language-c" style="font-family: Consolas, ‘Liberation Mono‘, Menlo, Courier, monospace; word-wrap: break-word;"><span class="pun" style="color: rgb(147, 161, 161);"><font face="微软雅黑"> <font color="#000000">def __unicode__(self):
  5.     </font><font color="#ff0000"># 在Python3中使用 def __str__(self)</font><font color="#000000">
  6. return self.username </font></font></span></code><code class="language-c" style="font-family: Consolas, ‘Liberation Mono‘, Menlo, Courier, monospace; word-wrap: break-word;"><span class="pun" style="color: rgb(147, 161, 161);"><font face="微软雅黑"> </font></span></code>
   PS: 我们新建了一个UserInfo类,继承自models.Model, 一个人有姓名和年龄。这里用到了三种Field。
    3、我们来同步一下数据库 注意:Django 1.7 及以上的版本需要用以下命令
  1. <code class="language-c" style="font-family: Consolas, ‘Liberation Mono‘, Menlo, Courier, monospace; word-wrap: break-word;"><font face="微软雅黑"><span class="pln" style="color: rgb(72, 72, 76);">python manage</span><span class="pun" style="color: rgb(147, 161, 161);">.</span><span class="pln" style="color: rgb(72, 72, 76);">py makemigrations</span></font></code><code class="language-c" style="font-family: Consolas, ‘Liberation Mono‘, Menlo, Courier, monospace; word-wrap: break-word;"><font face="微软雅黑"><span class="pln" style="color: rgb(72, 72, 76);">python manage</span><span class="pun" style="color: rgb(147, 161, 161);">.</span><span class="pln" style="color: rgb(72, 72, 76);">py migrate</span></font></code>

然后,我们会看到,Django生成了一系列的表,也生成了我们新建的UserInfo 这个表,那么如何使用这个表呢? Django提供了丰富的API, 下面演示如何使用它。
>>>>>>

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

123456$ python manage.py shell >>> from people.models import UserInfo>>> UserInfo.objects.create(name="zhangsan", age=24)<Person: Person object>>>>

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

123>>> Userinfo.objects.get(name="zhangsan")<UserInfoUserInfo object>>>>

       我们用了一个 .objects.get() 方法查询出来符合条件的对象,但是大家注意到了没有,查询结果中显示<UserInfo:UserInfo object>,这里并没有显示出与zhangsan的相关信息,如果用户多了就无法知道查询出来的到底是谁,查询结果是否正确,我们重新修改一下 blog_app/models.py

     1、name 和 age 等字段中不能有 __(双下划线,因为在Django QuerySet API中有特殊含义(用于关系,包含,不区分大小写,以什么开头或结尾,日期的大于小于,正则等)

     2、也不能有Python中的关键字,name 是合法的,student_name 也合法,但是student__name不合法,try, class, continue 也不合法,因为它是Python的关键字( import  keyword;  print(keyword.kwlist) 可以打出所有的关键字)


来源: http://www.ziqiangxuetang.com/django/django-models.html


来自为知笔记(Wiz)

Django?模型(数据库)

标签:

人气教程排行