Jadual Kandungan
字段查询
__id
__exact
__iexact
__contains
__ icontains
__in
__gt 大于
__range
__year
__month
__day
__hour
__minute
__isnull
Rumah pangkalan data tutorial mysql Django中的模型与数据库(Models and database)

Django中的模型与数据库(Models and database)

Jun 07, 2016 pm 03:15 PM
and da django pangkalan data Model

Django中的模型与数据库(Models and database) 对于数据库大家都不陌生,但是Models该怎么理解,官方文档中有这么一句话: A model is the single, definitive source of data about your data. It contains the essential fields and behaviors of thedata yo

Django中的模型与数据库(Models and database)

对于数据库大家都不陌生,但是Models该怎么理解,官方文档中有这么一句话:
A model is the single, definitive source of data about your data. It contains the essential fields and behaviors of thedata you’re storing. Generally, each model maps to a single database table.

下文暂且称Models为“模型”(个人叫法)


那么,模型具备以下三个特征:

每一个模型都是一个python子类。继承django.db.models.Model模型的每一个属性代表一个数据库字段除了上述之外,jango还提供了自动生成数据库访问的API为了方便理解我们举个例子下面这个例子我们建立了一个Person的模型,且有两个字段)first_name,last_name

<code><span>from</span> django.db <span>import</span> models
<span><span>class</span> <span>Person</span><span>(models.Model)</span>:</span>
    first_name = models.CharField(max_length=<span>30</span>)
    last_name = models.CharField(max_length=<span>30</span>)

first_name和last_name是Person模型的Field,每一个Field都是一个指定的类的属性,每一个属性映射到数据库的没一列</code>
Salin selepas log masuk

这里我就有一个疑问,到底Field能不能称为字段?


<code>上面的Person模型将会对应一张这样的数据库表:

CREATE TABLE myapp_person (
    <span>"id"</span> serial NOT NULL PRIMARY KEY,
    <span>"first_name"</span> varchar(<span>30</span>) NOT NULL,
    <span>"last_name"</span> varchar(<span>30</span>) NOT NULL
);

下面我们聊聊使用,一旦你声明了一个models,你需要去告诉jango你将会去使用该models,在你的settings里把你的

应用名加到INSTALLED_APPS中

INSTALLED_APPS = (
<span>#...</span>
’myapp’,
<span>#...</span>
)
当你在INSTALLED_APPS添加新应用后,需要执行manage.py migrate </code>
Salin selepas log masuk

接下来我们再来说说Fields

<code>它是模型的重要的一部分,它定义了数据库表的字段

<span>from</span> django.db <span>import</span> models
<span><span>class</span> <span>Musician</span><span>(models.Model)</span>:</span>
    first_name = models.CharField(max_length=<span>50</span>)
    last_name = models.CharField(max_length=<span>50</span>)
    instrument = models.CharField(max_length=<span>100</span>)
    <span><span>class</span> <span>Album</span><span>(models.Model)</span>:</span>
    artist = models.ForeignKey(Musician)
    name = models.CharField(max_length=<span>100</span>)
    release_date = models.DateField()
    num_stars = models.IntegerField()

模型中每一个field是一个Field类实例,jango通过Field类类型去确定一下几个点。
<span>1.</span>数据库字段的类型
<span>2.</span>使用默认的HTML部件但渲染表单的field时(e.g. <input type="“text”">,<select>)</select></code>
Salin selepas log masuk

Field option

<code>每一个Field都有一个特定参数,例如CharField,max_length
null  如果是真,jango将会存储空值null进数据库 默认为false
blank 如果为真,field将会允许空格的输入, 默认为false
choices 一个二位元组,如果field中使用choices 则在前端展示的HTML组件就是<select>
</select></code>
Salin selepas log masuk

举个例子

<code>
YEAR_IN_SCHOOL_CHOICES = (
(’FR’, ’Freshman’),
(’SO’, ’Sophomore’),
(’JR’, ’Junior’),
(’SR’, ’Senior’),
(’GR’, ’Graduate’),
)

<span>from</span> django.db <span>import</span> models
<span><span>class</span> <span>Person</span><span>(models.Model)</span>:</span>
    SHIRT_SIZES = ( 
        (’S’, ’Small’),
        (’M’, ’Medium’),
        (’L’, ’Large’),
    )
    name = models.CharField(max_length=<span>60</span>)
    shirt_size = models.CharField(max_length=<span>1</span>,choices=SHIRT_SIZES)



<span>>>> </span>p = Person(name=<span>"Fred Flintstone"</span>, shirt_size=<span>"L"</span>)
<span>>>> </span>p.save()
<span>>>> </span>p.shirt_size
u’L’
<span>>>> </span>p.get_shirt_size_display()
u’Large’</code>
Salin selepas log masuk

save()
这个在后台执行了一个插入sql。但是并没有真正的导数据库知道用户执行了save(),save()没有返回值,但是save()支持参数

<code>Model.save ([force_insert=<span>False</span>, force_update=<span>False</span>, using=DEFAULT_DB_ALIAS, update_fields=<span>None</span>
] )</code>
Salin selepas log masuk

当你执行save()操作,jango执行以下步鄹

  • 1:触发pre-save事件,这个信号,任何一个函数都可以监听这个事件

  • 2:一些有特殊的字段类型的字段做处理,例如dateField和auto_now=True这时候得到的值是jango生成的时间,这里要注意的是,数据库的时间可能跟服务器的不一样,所以这里要注意时间同步。

  • 3:为插入准备数据,每一个字段提供一个处理后的值

  • 4:为插入准备sql,这里我理解为拼sql

  • 5:发给数据库执行sql

all()

<code>all_entries = Entry.objects.all() 查看所有的内容

filter(**kwargs)

我们现在看下通过过滤器(filters)获取具体的值

Entry.objects.filter(pub_date__year=<span>2006</span>)

exclude(**kwargs)

Entry.objects.filter(
<span>... </span>headline__startswith=’What’
<span>... </span>).exclude(
<span>... </span>pub_date__gte=datetime.date.today()
<span>... </span>).filter(
<span>... </span>pub_date__gte=datetime(<span>2005</span>, <span>1</span>, <span>30</span>)
… )

返回除去与查找条件相符的数据

get()

如果想要返回指定的一个数据

one_enty = Entry.objects.get(pk=<span>1</span>)
</code>
Salin selepas log masuk

字段查询

__id

<code>被指定的查询字段名字必须是模型field名字相对应,除非外键的情况

Entry.objects.filter(blog_id=<span>4</span>)

这时候返回并不是Entry中id=<span>4</span>的数据行,而是id对应主键算在的数据行</code>
Salin selepas log masuk

__exact

<code>最普通的情况(默认添加)

Entry.objects.get(headline__exact=<span>"Man bites dog"</span>)

翻译成sql就为

SELECT ... WHERE headline = ’Man bites dog’;


Blog.objects.get(id__exact=<span>14</span>) <span># 明确的形式</span>
Blog.objects.get(id=<span>14</span>) <span># __exact 默认添加</span></code>
Salin selepas log masuk

__iexact

<code>Blog.objects.get(name__iexact=<span>"beatles blog"</span>)

结果可能是 <span>"Beatles Blog"</span>,  <span>"beatles blog"</span>, <span>or</span>   <span>"BeAtlES blOG"</span>.

不区分大小写</code>
Salin selepas log masuk

__contains

<code>Entry.objects.get(headline__contains=’Lennon’)

模糊搜索,翻译成sql

SELECT ... WHERE headline LIKE ’%Lennon%’;</code>
Salin selepas log masuk

__ icontains

<code>Entry.objects.get(headline__icontains=’Lennon’)

sql:

SELECT ... WHERE headline ILIKE ’%Lennon%’;</code>
Salin selepas log masuk

__in

<code>Entry.objects.filter(id__in=[<span>1</span>,<span>3</span>,<span>4</span>]
sql:
SELECT … WHERE id IN (<span>1</span>,<span>3</span>,<span>4</span>);

这种也可以用复合sql的形式表示
 inner_qs = Blog.objects.filter(name__contains=’Cheddar’)

entries = Entry.objects.filter(blog__in=inner_qs)

sql:

SELECT ... WHERE blog.id IN (SELECT id FROM ... WHERE NAME LIKE ’%Cheddar%’)</code>
Salin selepas log masuk

__gt 大于

<code>Entry.objects.filter(id__gt=<span>4</span>)
sql:
SELECT … WHERE id > <span>4</span>
__gte 大于等于
__lt 小于
__lte 小于等于</code>
Salin selepas log masuk

__range

<code><span>import</span> datetime
start_date = datetime.date(<span>2005</span>, <span>1</span>, <span>1</span>)
end_date = datetime.date(<span>2005</span>, <span>3</span>, <span>31</span>)
Entry.objects.filter(pub_date__range=(start_date, end_date))

sql:
SELECT ... WHERE pub_date BETWEEN ’<span>2005</span>-<span>01</span>-<span>01</span>’ <span>and</span> ’<span>2005</span>-<span>03</span>-<span>31</span>’;</code>
Salin selepas log masuk

__year

<code>Entry.objects.filter(pub_date_year=<span>2005</span>)
sql:
SELECT … WHERE pub_date BETWEEN ‘<span>2005</span>-<span>01</span>-<span>01</span>’ <span>and</span> ‘<span>2005</span>-<span>12</span>-<span>31</span>’;</code>
Salin selepas log masuk

__month

__day

__hour

__minute

<code>Entry.objects.filter(pub_date__month=<span>12</span>)
sql:

SELECT ... WHERE EXTRACT(’month’ FROM pub_date) = ’<span>12</span>’;</code>
Salin selepas log masuk

__isnull

<code>Entry.objects.filter(pub_date__isnull=<span>True</span>)
sql:
SELECT ... WHERE pub_date IS NULL;</code>
Salin selepas log masuk
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

Video Face Swap

Video Face Swap

Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

KAN, yang menggantikan MLP, telah diperluaskan kepada konvolusi oleh projek sumber terbuka KAN, yang menggantikan MLP, telah diperluaskan kepada konvolusi oleh projek sumber terbuka Jun 01, 2024 pm 10:03 PM

Awal bulan ini, penyelidik dari MIT dan institusi lain mencadangkan alternatif yang sangat menjanjikan kepada MLP - KAN. KAN mengatasi MLP dari segi ketepatan dan kebolehtafsiran. Dan ia boleh mengatasi prestasi MLP berjalan dengan bilangan parameter yang lebih besar dengan bilangan parameter yang sangat kecil. Sebagai contoh, penulis menyatakan bahawa mereka menggunakan KAN untuk menghasilkan semula keputusan DeepMind dengan rangkaian yang lebih kecil dan tahap automasi yang lebih tinggi. Khususnya, MLP DeepMind mempunyai kira-kira 300,000 parameter, manakala KAN hanya mempunyai kira-kira 200 parameter. KAN mempunyai asas matematik yang kukuh seperti MLP berdasarkan teorem penghampiran universal, manakala KAN berdasarkan teorem perwakilan Kolmogorov-Arnold. Seperti yang ditunjukkan dalam rajah di bawah, KAN telah

Tiada data OpenAI diperlukan, sertai senarai model kod besar! UIUC mengeluarkan StarCoder-15B-Instruct Tiada data OpenAI diperlukan, sertai senarai model kod besar! UIUC mengeluarkan StarCoder-15B-Instruct Jun 13, 2024 pm 01:59 PM

Di barisan hadapan teknologi perisian, kumpulan UIUC Zhang Lingming, bersama penyelidik dari organisasi BigCode, baru-baru ini mengumumkan model kod besar StarCoder2-15B-Instruct. Pencapaian inovatif ini mencapai kejayaan ketara dalam tugas penjanaan kod, berjaya mengatasi CodeLlama-70B-Instruct dan mencapai bahagian atas senarai prestasi penjanaan kod. Keunikan StarCoder2-15B-Instruct terletak pada strategi penjajaran diri yang tulen Keseluruhan proses latihan adalah terbuka, telus, dan sepenuhnya autonomi dan boleh dikawal. Model ini menjana beribu-ribu arahan melalui StarCoder2-15B sebagai tindak balas kepada penalaan halus model asas StarCoder-15B tanpa bergantung pada anotasi manual yang mahal.

Yolov10: Penjelasan terperinci, penggunaan dan aplikasi semuanya di satu tempat! Yolov10: Penjelasan terperinci, penggunaan dan aplikasi semuanya di satu tempat! Jun 07, 2024 pm 12:05 PM

1. Pengenalan Sejak beberapa tahun kebelakangan ini, YOLO telah menjadi paradigma dominan dalam bidang pengesanan objek masa nyata kerana keseimbangannya yang berkesan antara kos pengiraan dan prestasi pengesanan. Penyelidik telah meneroka reka bentuk seni bina YOLO, matlamat pengoptimuman, strategi pengembangan data, dsb., dan telah mencapai kemajuan yang ketara. Pada masa yang sama, bergantung pada penindasan bukan maksimum (NMS) untuk pemprosesan pasca menghalang penggunaan YOLO dari hujung ke hujung dan memberi kesan buruk kepada kependaman inferens. Dalam YOLO, reka bentuk pelbagai komponen tidak mempunyai pemeriksaan yang komprehensif dan teliti, mengakibatkan lebihan pengiraan yang ketara dan mengehadkan keupayaan model. Ia menawarkan kecekapan suboptimum, dan potensi yang agak besar untuk peningkatan prestasi. Dalam kerja ini, matlamatnya adalah untuk meningkatkan lagi sempadan kecekapan prestasi YOLO daripada kedua-dua pasca pemprosesan dan seni bina model. sampai habis

iOS 18 menambah fungsi album 'Dipulihkan' baharu untuk mendapatkan semula foto yang hilang atau rosak iOS 18 menambah fungsi album 'Dipulihkan' baharu untuk mendapatkan semula foto yang hilang atau rosak Jul 18, 2024 am 05:48 AM

Keluaran terbaharu Apple bagi sistem iOS18, iPadOS18 dan macOS Sequoia telah menambah ciri penting pada aplikasi Photos, yang direka untuk membantu pengguna memulihkan foto dan video yang hilang atau rosak dengan mudah disebabkan pelbagai sebab. Ciri baharu ini memperkenalkan album yang dipanggil "Dipulihkan" dalam bahagian Alat pada apl Foto yang akan muncul secara automatik apabila pengguna mempunyai gambar atau video pada peranti mereka yang bukan sebahagian daripada pustaka foto mereka. Kemunculan album "Dipulihkan" menyediakan penyelesaian untuk foto dan video yang hilang akibat kerosakan pangkalan data, aplikasi kamera tidak disimpan ke pustaka foto dengan betul, atau aplikasi pihak ketiga yang menguruskan pustaka foto. Pengguna hanya memerlukan beberapa langkah mudah

Tutorial terperinci tentang mewujudkan sambungan pangkalan data menggunakan MySQLi dalam PHP Tutorial terperinci tentang mewujudkan sambungan pangkalan data menggunakan MySQLi dalam PHP Jun 04, 2024 pm 01:42 PM

Cara menggunakan MySQLi untuk mewujudkan sambungan pangkalan data dalam PHP: Sertakan sambungan MySQLi (require_once) Cipta fungsi sambungan (functionconnect_to_db) Fungsi sambungan panggilan ($conn=connect_to_db()) Laksanakan pertanyaan ($result=$conn->query()) Tutup sambungan ( $conn->close())

Universiti Tsinghua mengambil alih dan YOLOv10 keluar: prestasi telah bertambah baik dan ia berada dalam senarai panas GitHub Universiti Tsinghua mengambil alih dan YOLOv10 keluar: prestasi telah bertambah baik dan ia berada dalam senarai panas GitHub Jun 06, 2024 pm 12:20 PM

Siri penanda aras YOLO sistem pengesanan sasaran sekali lagi menerima peningkatan besar. Sejak pengeluaran YOLOv9 pada Februari tahun ini, baton siri YOLO (YouOnlyLookOnce) telah diserahkan kepada penyelidik di Universiti Tsinghua. Hujung minggu lalu, berita pelancaran YOLOv10 menarik perhatian komuniti AI. Ia dianggap sebagai rangka kerja terobosan dalam bidang penglihatan komputer dan terkenal dengan keupayaan pengesanan objek hujung ke hujung masa nyata, meneruskan legasi siri YOLO dengan menyediakan penyelesaian berkuasa yang menggabungkan kecekapan dan ketepatan. Alamat kertas: https://arxiv.org/pdf/2405.14458 Alamat projek: https://github.com/THU-MIG/yo

Bagaimana untuk mengendalikan ralat sambungan pangkalan data dalam PHP Bagaimana untuk mengendalikan ralat sambungan pangkalan data dalam PHP Jun 05, 2024 pm 02:16 PM

Untuk mengendalikan ralat sambungan pangkalan data dalam PHP, anda boleh menggunakan langkah berikut: Gunakan mysqli_connect_errno() untuk mendapatkan kod ralat. Gunakan mysqli_connect_error() untuk mendapatkan mesej ralat. Dengan menangkap dan mengelog mesej ralat ini, isu sambungan pangkalan data boleh dikenal pasti dan diselesaikan dengan mudah, memastikan kelancaran aplikasi anda.

Laporan teknikal Google Gemini 1.5: Buktikan soalan Olimpik Matematik dengan mudah, versi Flash adalah 5 kali lebih pantas daripada GPT-4 Turbo Laporan teknikal Google Gemini 1.5: Buktikan soalan Olimpik Matematik dengan mudah, versi Flash adalah 5 kali lebih pantas daripada GPT-4 Turbo Jun 13, 2024 pm 01:52 PM

Pada bulan Februari tahun ini, Google melancarkan model besar berbilang modal Gemini 1.5, yang telah meningkatkan prestasi dan kelajuan dengan sangat baik melalui pengoptimuman kejuruteraan dan infrastruktur, seni bina MoE dan strategi lain. Dengan konteks yang lebih panjang, keupayaan penaakulan yang lebih kukuh dan pengendalian kandungan merentas modal yang lebih baik. Jumaat ini, Google DeepMind secara rasmi mengeluarkan laporan teknikal Gemini 1.5, yang merangkumi versi Flash dan peningkatan terkini yang lain Dokumen itu sepanjang 153 halaman. Pautan laporan teknikal: https://storage.googleapis.com/deepmind-media/gemini/gemini_v1_5_report.pdf Dalam laporan ini, Google memperkenalkan Gemini1

See all articles