- Peewee 教程
- Peewee - 首頁
- Peewee - 概述
- Peewee - 資料庫類
- Peewee - 模型
- Peewee - 欄位類
- Peewee - 插入新記錄
- Peewee - 選擇記錄
- Peewee - 過濾器
- Peewee - 主鍵 & 複合主鍵
- Peewee - 更新現有記錄
- Peewee - 刪除記錄
- Peewee - 建立索引
- Peewee - 約束
- Peewee - 使用 MySQL
- Peewee - 使用 PostgreSQL
- Peewee - 動態定義資料庫
- Peewee - 連線管理
- Peewee - 關係 & 連線
- Peewee - 子查詢
- Peewee - 排序
- Peewee - 計數 & 聚合
- Peewee - SQL 函式
- Peewee - 獲取行元組/字典
- Peewee - 使用者自定義運算子
- Peewee - 原子事務
- Peewee - 資料庫錯誤
- Peewee - 查詢構建器
- Peewee - 與 Web 框架整合
- Peewee - SQLite 擴充套件
- Peewee - PostgreSQL & MySQL 擴充套件
- Peewee - 使用 CockroachDB
- Peewee 有用資源
- Peewee - 快速指南
- Peewee - 有用資源
- Peewee - 討論
Peewee - 主鍵和複合主鍵
建議關係資料庫中的表應該有一列應用主鍵約束。相應地,Peewee 模型類也可以指定欄位屬性,並將 primary-key 引數設定為 True。但是,如果模型類沒有任何主鍵,Peewee 會自動建立一個名為“id”的主鍵。請注意,上面定義的 User 模型沒有任何欄位明確定義為主鍵。因此,我們資料庫中對映的 User 表有一個 id 欄位。
要定義一個自動遞增的整數主鍵,請在模型中使用 **AutoField** 物件作為屬性。
class User (Model):
user_id=AutoField()
name=TextField()
age=IntegerField()
class Meta:
database=db
db_table='User'
這將轉換為以下 CREATE TABLE 查詢:
CREATE TABLE User ( user_id INTEGER NOT NULL PRIMARY KEY, name TEXT NOT NULL, age INTEGER NOT NULL );
您也可以將任何非整數字段指定為主鍵,方法是將 primary_key 引數設定為 True。假設我們想儲存某個字母數字值作為 user_id。
class User (Model):
user_id=TextField(primary_key=True)
name=TextField()
age=IntegerField()
class Meta:
database=db
db_table='User'
但是,當模型包含非整數字段作為主鍵時,模型例項的 **save()** 方法不會導致資料庫驅動程式自動生成新 ID,因此我們需要傳遞 **force_insert=True** 引數。但是,請注意,**create()** 方法隱式指定了 force_insert 引數。
User.create(user_id='A001',name="Rajesh", age=21) b=User(user_id='A002',name="Amar", age=20) b.save(force_insert=True)
save() 方法還會更新表中的現有行,此時不需要 force_insert 主鍵,因為具有唯一主鍵的 ID 已經存在。
Peewee 允許定義複合主鍵的功能。**CompositeKey** 類的物件在 Meta 類中定義為主鍵。在下面的示例中,由 User 模型的 name 和 city 欄位組成的複合鍵已被指定為複合主鍵。
class User (Model):
name=TextField()
city=TextField()
age=IntegerField()
class Meta:
database=db
db_table='User'
primary_key=CompositeKey('name', 'city')
此模型轉換為以下 CREATE TABLE 查詢。
CREATE TABLE User (
name TEXT NOT NULL,
city TEXT NOT NULL,
age INTEGER NOT NULL,
PRIMARY KEY (
name,
city
)
);
如果您希望表沒有主鍵,則在模型的 Meta 類中指定 primary_key=False。
廣告