Django model

Django supports a variety of databases, including PostgreSQL, MySQL, SQLite, Oracle.

Django provides a unified call API for these databases. We can choose different databases based on our own business needs.

MySQL is the most commonly used database in web applications. We’ll cover Mysql as an example in this section. You can learn more about the basics of Mysql in this site.

If you don’t have mysql driver installed, you can perform the following command installation:

sudo pip install mysqlclient
sudo pip install mysqlclient
sudo pip install mysqlclient

If you are new to Django, this is a good Django course

Database configuration

We set the DATABASES configuration in the project’s settings.py file and changed its information to:

DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'test',
'USER': 'test',
'PASSWORD': '****yourpassword****',
'HOST':'localhost',
'PORT':'3306',
}
}
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'test',
        'USER': 'test',
        'PASSWORD': '****yourpassword****',
        'HOST':'localhost',
        'PORT':'3306',
    }
}
DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': 'test', 'USER': 'test', 'PASSWORD': '****yourpassword****', 'HOST':'localhost', 'PORT':'3306', } }

It contains database names and user information, which are the same as the corresponding database and user settings in MySQL. Based on this setting, Django connects to the appropriate databases and users in MySQL.

Defining a model

Django states that if you want to use a model, you must create an app. We use the following command to create an app for TestModel:

python manage.py startapp TestModel
python manage.py startapp TestModel
python manage.py startapp TestModel

The directory structure is as follows:

HelloWorld
|-- TestModel
| |-- __init__.py
| |-- admin.py
| |-- models.py
| |-- tests.py
| `-- views.py
HelloWorld
|-- TestModel
|   |-- __init__.py
|   |-- admin.py
|   |-- models.py
|   |-- tests.py
|   `-- views.py
HelloWorld |-- TestModel | |-- __init__.py | |-- admin.py | |-- models.py | |-- tests.py | `-- views.py

We modify the TestModel/models.py file with the following code:

HelloWorld/TestModel/models.py: file code:

<span># models.py </span><span>from</span> <span>django.db</span> <span>import</span> <span>models</span>
<span>class</span> <span>Test</span><span>(</span><span>models</span><span>.</span><span>Model</span><span>):</span>
<span>name</span> <span>=</span> <span>models</span><span>.</span><span>CharField</span><span>(</span><span>max_length</span><span>=</span><span>20</span><span>)</span>
<span># models.py </span><span>from</span> <span>django.db</span> <span>import</span> <span>models</span>

<span>class</span> <span>Test</span><span>(</span><span>models</span><span>.</span><span>Model</span><span>):</span>
    <span>name</span> <span>=</span> <span>models</span><span>.</span><span>CharField</span><span>(</span><span>max_length</span><span>=</span><span>20</span><span>)</span>
# models.py from django.db import models class Test(models.Model): name = models.CharField(max_length=20)

The above classes represent the database name and inherit models. Model, the fields inside the class represent the fields in the data table (name), and the data types are defined by CharField (equivalent to varchar) and the max_length parameters.

Next, find this INSTALLED_APPS in settings.py, as follows:

<span>INSTALLED_APPS</span> <span>=</span> <span>(</span>
<span>'django.contrib.admin'</span><span>,</span>
<span>'django.contrib.auth'</span><span>,</span>
<span>'django.contrib.contenttypes'</span><span>,</span>
<span>'django.contrib.sessions'</span><span>,</span>
<span>'django.contrib.messages'</span><span>,</span>
<span>'django.contrib.staticfiles'</span><span>,</span>
<span>'TestModel'</span><span>,</span>
<span>)</span>
<span>INSTALLED_APPS</span> <span>=</span> <span>(</span>
    <span>'django.contrib.admin'</span><span>,</span>
    <span>'django.contrib.auth'</span><span>,</span>
    <span>'django.contrib.contenttypes'</span><span>,</span>
    <span>'django.contrib.sessions'</span><span>,</span>
    <span>'django.contrib.messages'</span><span>,</span>
    <span>'django.contrib.staticfiles'</span><span>,</span>
    <span>'TestModel'</span><span>,</span>
<span>)</span>
INSTALLED_APPS = ( 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'TestModel', )

Run on the command line:

Note: In Django 1.9 and future versions use migrate instead of syscdb.

$ python manage.py migrate
$ python manage.py makemigrations TestModel
$ python manage.py migrate TestModel
$ python manage.py migrate
$ python manage.py makemigrations TestModel
$ python manage.py migrate TestModel
$ python manage.py migrate $ python manage.py makemigrations TestModel $ python manage.py migrate TestModel

You’ll be able to create your data sheet with a few lines of the words “Creative table…”.

Creating tables ...
……
Creating table TestModel_test
……
Creating tables ...
…… 
Creating table TestModel_test
……
Creating tables ... …… Creating table TestModel_test ……

The table name is composed of: app name, class name (e.g., TestModel_test).

Note: Although we didn’t set the primary key to the table in models, Django automatically adds an id as the primary key.

Database operations

Next, we add testdb.py files in the HelloWorld directory and modify urls.py:

<span>from</span> <span>django.conf.urls</span> <span>import</span> <span>*</span>
<span>from</span> <span>HelloWorld.view</span> <span>import</span> <span>hello</span>
<span>from</span> <span>HelloWorld.testdb</span> <span>import</span> <span>testdb</span>
<span>urlpatterns</span> <span>=</span> <span>patterns</span><span>(</span><span>""</span><span>,</span>
<span>(</span><span>'^hello/$'</span><span>,</span> <span>hello</span><span>),</span>
<span>(</span><span>'^testdb/$'</span><span>,</span> <span>testdb</span><span>),</span>
<span>)</span>
<span>from</span> <span>django.conf.urls</span> <span>import</span> <span>*</span>
<span>from</span> <span>HelloWorld.view</span> <span>import</span> <span>hello</span>
<span>from</span> <span>HelloWorld.testdb</span> <span>import</span> <span>testdb</span>

<span>urlpatterns</span> <span>=</span> <span>patterns</span><span>(</span><span>""</span><span>,</span>
        <span>(</span><span>'^hello/$'</span><span>,</span> <span>hello</span><span>),</span>
        <span>(</span><span>'^testdb/$'</span><span>,</span> <span>testdb</span><span>),</span>
<span>)</span>
from django.conf.urls import * from HelloWorld.view import hello from HelloWorld.testdb import testdb urlpatterns = patterns("", ('^hello/$', hello), ('^testdb/$', testdb), )

Add data

Adding data requires creating an object before executing the save function, which is equivalent to INSERT in SQL:

<span>from</span> <span>django.http</span> <span>import</span> <span>HttpResponse</span>
<span>from</span> <span>TestModel.models</span> <span>import</span> <span>Test</span>
<span>def</span> <span>testdb</span><span>(</span><span>request</span><span>):</span>
<span>test1</span> <span>=</span> <span>Test</span><span>(</span><span>name</span><span>=</span><span>'dev.to'</span><span>)</span>
<span>test1</span><span>.</span><span>save</span><span>()</span>
<span>return</span> <span>HttpResponse</span><span>(</span><span>"<p>saved</p>"</span><span>)</span>
<span>from</span> <span>django.http</span> <span>import</span> <span>HttpResponse</span>
<span>from</span> <span>TestModel.models</span> <span>import</span> <span>Test</span>

<span>def</span> <span>testdb</span><span>(</span><span>request</span><span>):</span>
  <span>test1</span> <span>=</span> <span>Test</span><span>(</span><span>name</span><span>=</span><span>'dev.to'</span><span>)</span>
  <span>test1</span><span>.</span><span>save</span><span>()</span>
  <span>return</span> <span>HttpResponse</span><span>(</span><span>"<p>saved</p>"</span><span>)</span>
from django.http import HttpResponse from TestModel.models import Test def testdb(request): test1 = Test(name='dev.to') test1.save() return HttpResponse("<p>saved</p>")

Visit /testdb/ you can see a hint of success in adding data. If you want you can verify this in the MySQL database table.

Get data

Django provides a variety of ways to get the contents of the database, as shown in the following code:

HelloWorld/HelloWorld/testdb.py: File code:

<span>from</span> <span>django.http</span> <span>import</span> <span>HttpResponse</span>
<span>from</span> <span>TestModel.models</span> <span>import</span> <span>Test</span>
<span>def</span> <span>testdb</span><span>(</span><span>request</span><span>):</span>
<span>response</span> <span>=</span> <span>""</span>
<span>response1</span> <span>=</span> <span>""</span>
<span># Get all the data the all() method, this is equivalent to SELECT * in SQL. </span> <span>list</span> <span>=</span> <span>Test</span><span>.</span><span>objects</span><span>.</span><span>all</span><span>()</span>
<span># Filter is equivalent to WHERE in SQL </span> <span>response2</span> <span>=</span> <span>Test</span><span>.</span><span>objects</span><span>.</span><span>filter</span><span>(</span><span>id</span><span>=</span><span>1</span><span>)</span>
<span># Get a single object </span> <span>response3</span> <span>=</span> <span>Test</span><span>.</span><span>objects</span><span>.</span><span>get</span><span>(</span><span>id</span><span>=</span><span>1</span><span>)</span>
<span># Limit returned data equivalent to OFFSET 0 LIMIT 2 in SQL </span> <span>Test</span><span>.</span><span>objects</span><span>.</span><span>order_by</span><span>(</span><span>'name'</span><span>)[</span><span>0</span><span>:</span><span>2</span><span>]</span>
<span>Test</span><span>.</span><span>objects</span><span>.</span><span>order_by</span><span>(</span><span>"id"</span><span>)</span>
<span>Test</span><span>.</span><span>objects</span><span>.</span><span>filter</span><span>(</span><span>name</span><span>=</span><span>"dev.to"</span><span>).</span><span>order_by</span><span>(</span><span>"id"</span><span>)</span>
<span># Output all data </span> <span>for</span> <span>var</span> <span>in</span> <span>list</span><span>:</span>
<span>response1</span> <span>+=</span> <span>var</span><span>.</span><span>name</span> <span>+</span> <span>" "</span>
<span>response</span> <span>=</span> <span>response1</span>
<span>return</span> <span>HttpResponse</span><span>(</span><span>"<p>"</span> <span>+</span> <span>response</span> <span>+</span> <span>"</p>"</span><span>)</span>
<span>from</span> <span>django.http</span> <span>import</span> <span>HttpResponse</span>
<span>from</span> <span>TestModel.models</span> <span>import</span> <span>Test</span>

<span>def</span> <span>testdb</span><span>(</span><span>request</span><span>):</span>
    <span>response</span> <span>=</span> <span>""</span>
    <span>response1</span> <span>=</span> <span>""</span>

    <span># Get all the data the all() method, this is equivalent to SELECT * in SQL. </span>    <span>list</span> <span>=</span> <span>Test</span><span>.</span><span>objects</span><span>.</span><span>all</span><span>()</span>

    <span># Filter is equivalent to WHERE in SQL </span>    <span>response2</span> <span>=</span> <span>Test</span><span>.</span><span>objects</span><span>.</span><span>filter</span><span>(</span><span>id</span><span>=</span><span>1</span><span>)</span> 

    <span># Get a single object </span>    <span>response3</span> <span>=</span> <span>Test</span><span>.</span><span>objects</span><span>.</span><span>get</span><span>(</span><span>id</span><span>=</span><span>1</span><span>)</span> 

    <span># Limit returned data equivalent to OFFSET 0 LIMIT 2 in SQL </span>    <span>Test</span><span>.</span><span>objects</span><span>.</span><span>order_by</span><span>(</span><span>'name'</span><span>)[</span><span>0</span><span>:</span><span>2</span><span>]</span>
    <span>Test</span><span>.</span><span>objects</span><span>.</span><span>order_by</span><span>(</span><span>"id"</span><span>)</span>
    <span>Test</span><span>.</span><span>objects</span><span>.</span><span>filter</span><span>(</span><span>name</span><span>=</span><span>"dev.to"</span><span>).</span><span>order_by</span><span>(</span><span>"id"</span><span>)</span>

    <span># Output all data </span>    <span>for</span> <span>var</span> <span>in</span> <span>list</span><span>:</span>
        <span>response1</span> <span>+=</span> <span>var</span><span>.</span><span>name</span> <span>+</span> <span>" "</span>

    <span>response</span> <span>=</span> <span>response1</span>
    <span>return</span> <span>HttpResponse</span><span>(</span><span>"<p>"</span> <span>+</span> <span>response</span> <span>+</span> <span>"</p>"</span><span>)</span>
from django.http import HttpResponse from TestModel.models import Test def testdb(request): response = "" response1 = "" # Get all the data the all() method, this is equivalent to SELECT * in SQL. list = Test.objects.all() # Filter is equivalent to WHERE in SQL response2 = Test.objects.filter(id=1) # Get a single object response3 = Test.objects.get(id=1) # Limit returned data equivalent to OFFSET 0 LIMIT 2 in SQL Test.objects.order_by('name')[0:2] Test.objects.order_by("id") Test.objects.filter(name="dev.to").order_by("id") # Output all data for var in list: response1 += var.name + " " response = response1 return HttpResponse("<p>" + response + "</p>")

Update data

Modifying data can be made using save() or update():

HelloWorld/HelloWorld/testdb.py: File code:

<span>from</span> <span>django.http</span> <span>import</span> <span>HttpResponse</span>
<span>from</span> <span>TestModel.models</span> <span>import</span> <span>Test</span>
<span>def</span> <span>testdb</span><span>(</span><span>request</span><span>):</span>
<span># equivalent to UPDATE in SQL </span> <span>test1</span> <span>=</span> <span>Test</span><span>.</span><span>objects</span><span>.</span><span>get</span><span>(</span><span>id</span><span>=</span><span>1</span><span>)</span>
<span>test1</span><span>.</span><span>name</span> <span>=</span> <span>'dev.to'</span>
<span>test1</span><span>.</span><span>save</span><span>()</span>
<span># Another way </span> <span>#Test.objects.filter(id=1).update(name='dev.to') </span>
<span># Modify all columns </span> <span># Test.objects.all().update(name='dev.to') </span>
<span>return</span> <span>HttpResponse</span><span>(</span><span>"<p>Updated</p>"</span><span>)</span>
<span>from</span> <span>django.http</span> <span>import</span> <span>HttpResponse</span>

<span>from</span> <span>TestModel.models</span> <span>import</span> <span>Test</span>

<span>def</span> <span>testdb</span><span>(</span><span>request</span><span>):</span>
    <span># equivalent to UPDATE in SQL </span>    <span>test1</span> <span>=</span> <span>Test</span><span>.</span><span>objects</span><span>.</span><span>get</span><span>(</span><span>id</span><span>=</span><span>1</span><span>)</span>
    <span>test1</span><span>.</span><span>name</span> <span>=</span> <span>'dev.to'</span>
    <span>test1</span><span>.</span><span>save</span><span>()</span>

    <span># Another way </span>    <span>#Test.objects.filter(id=1).update(name='dev.to') </span>
    <span># Modify all columns </span>    <span># Test.objects.all().update(name='dev.to') </span>
    <span>return</span> <span>HttpResponse</span><span>(</span><span>"<p>Updated</p>"</span><span>)</span>
from django.http import HttpResponse from TestModel.models import Test def testdb(request): # equivalent to UPDATE in SQL test1 = Test.objects.get(id=1) test1.name = 'dev.to' test1.save() # Another way #Test.objects.filter(id=1).update(name='dev.to') # Modify all columns # Test.objects.all().update(name='dev.to') return HttpResponse("<p>Updated</p>")

Delete data

Simply call the delete() method of the object in the database by deleting it:

HelloWorld/HelloWorld/testdb.py: File code:

<span>from</span> <span>django.http</span> <span>import</span> <span>HttpResponse</span>
<span>from</span> <span>TestModel.models</span> <span>import</span> <span>Test</span>
<span>def</span> <span>testdb</span><span>(</span><span>request</span><span>):</span>
<span># Delete data where id=1 </span> <span>test1</span> <span>=</span> <span>Test</span><span>.</span><span>objects</span><span>.</span><span>get</span><span>(</span><span>id</span><span>=</span><span>1</span><span>)</span>
<span>test1</span><span>.</span><span>delete</span><span>()</span>
<span># Another way </span> <span># Test.objects.filter(id=1).delete() </span>
<span># Delete all data </span> <span># Test.objects.all().delete() </span>
<span>return</span> <span>HttpResponse</span><span>(</span><span>"<p>Deleted</p>"</span><span>)</span>
<span>from</span> <span>django.http</span> <span>import</span> <span>HttpResponse</span>

<span>from</span> <span>TestModel.models</span> <span>import</span> <span>Test</span>

<span>def</span> <span>testdb</span><span>(</span><span>request</span><span>):</span>
    <span># Delete data where id=1 </span>    <span>test1</span> <span>=</span> <span>Test</span><span>.</span><span>objects</span><span>.</span><span>get</span><span>(</span><span>id</span><span>=</span><span>1</span><span>)</span>
    <span>test1</span><span>.</span><span>delete</span><span>()</span>

    <span># Another way </span>    <span># Test.objects.filter(id=1).delete() </span>
    <span># Delete all data </span>    <span># Test.objects.all().delete() </span>
    <span>return</span> <span>HttpResponse</span><span>(</span><span>"<p>Deleted</p>"</span><span>)</span>
from django.http import HttpResponse from TestModel.models import Test def testdb(request): # Delete data where id=1 test1 = Test.objects.get(id=1) test1.delete() # Another way # Test.objects.filter(id=1).delete() # Delete all data # Test.objects.all().delete() return HttpResponse("<p>Deleted</p>")

原文链接:Django model

© 版权声明
THE END
喜欢就支持一下吧
点赞15 分享
Your dream is like a flower. if you water it patiently, the flower will come out beautifully.
即使是最简单的梦想,用心浇灌,也能开出绚烂的花
评论 抢沙发

请登录后发表评论

    暂无评论内容