Django Sqlite3 / ORM

Steven Wang
7 min readOct 9, 2020

--

sqlite是二進位檔案,副檔名是什麼不重要mydb.db / mydb.sqlite / mydb.splite3

mac sqlite 命令列

>sqlite3 table_name
.help
.quit
.tables
.schema table_name
insert into table_name values(,);

ORM

Object Relational Mapping,簡稱ORM,或O/RM,或O/R mapping),是一種程式設計技術,用於實現物件導向程式語言裡不同類型系統的資料之間的轉換。 從效果上說,它其實是創建了一個可在程式語言裡使用的「虛擬物件資料庫」。

資料庫有兩種
(一)關係模型 一對一 一對多 多對多 大部分資料庫採用
(二)物件模型 相對進步 才能描述繼承

Account表 是Table資料庫,每一行資料都是Account實例
Account Class 是結構
Account實例 是類的實例

定义数据模型

model.py
from django.db import models

# 创建用户模型
class User(models.Model):#繼承自django.db.models.Model類
name = models.CharField( primary_key = True , max_length = 100 )
password = models.CharField( max_length = 100 )
email = models.EmailField( max_length = 50 , null = True )
birthday = models.DateField( null = True )

# 定义表的元数据 (元數據:描述其他數據的數據 描述數據庫與表的關聯)
class Meta:
db_table = ‘users’ # 定义表名
ordering = [ ‘name’ ] # 设置排序字段

常用的字段类型:
AutoField:自增长字段。
CharField:可以指定最大值和最小值的字符字段。
TextField:字符串字段。
DateField:日期字段。
DateTimeField:日期时间字段。
TimeField:时间字段。
EmailField:email字段。
IntegerField:整数字段。
DecimalField:十进制数字段。
FloatField:浮点数字段。
ImageField:图片字段。

字段可选项:
null:设置是否字段可以为null。
blank:设置是否字段可以为空白。
default:设置默认值。
primary_key:设置主键。
unique:设置为候选键。

表的元数据类(Meta)
在表中定义元数据类Meta,它是一个嵌套类。元数据类Meta的属性:db_table:指定表名。
ordering:设置排序字段。
abstract:如果设置为True,说明该模型是抽象的,系统不会生成对应的表,它只能作为父类使用。

同步数据库

模型設定好,需要同步至資料庫

模型修改之后,需要执行如下指令:

python manger.py makemigrations
python manager.py migrate

makemigrations:负责生成数据库迁移计划,生成迁移执行文件。
migrate:负责执行或取消数据库迁移。

進入shell操作CRUD (Create Delete Update Read)

python manage.py shell(才有Django的環境,如果是 IDEL沒有Django的設定)

1-1查询所有

使用User.objects.all()方法,返回的QuerySet集合。
>>> from books.models import User ###
>>> User.objects.all()
<QuerySet [<User: User object (Tony)>]>
User.objects.all()是查询所有数据。QuerySet

1-2条件查询

User.objects.filter()方法返回是#QuerySet集合。
>>> from books.models import User
>>> User.objects.filter(name=’Tony’)
<QuerySet [<User: User object (Tony)>]>

User.objects.get()方法返回是#模型物件。
>>> User.objects.get(name=’Tony’)
<User: User object (Tony)>

s= User.objects.filter(name=’Tony’)
s[0] #取出模型物件第一個元素
<User: User object (Tony)>

2插入数据

方法1:
User.objects.create()方法對應字段插入数据
>>> User.objects.create(name=’关东升’,password=’123',birthday=’1978–5–6')
<User: User object (关东升)>

方法2:
创建模型物件,调用模型的save()方法实现。
>>> user = User(name=’Tom’,password=’123',birthday=’1977–5–6')
>>> user.save()

3修改数据

先查找模型,修改模型字段,调用模型的save()方法实现。
>>> u = User.objects.get(name=’Tony’) #先查找模型
>>> u.email = ‘125@qq.com’
>>> u.save()

4删除数据

先查找模型,调用delete()方法实现。
>>> u = User.objects.get(name=’Tony’)#先查找模型
>>> u.delete()

--

--

Steven Wang
Steven Wang

No responses yet