python 編寫Model

來源:互聯網
上載者:User

標籤:資料庫   image   prim   cti   primary   select   簡單   out   使用   

有了ORM,我們就可以把Web App需要的3個表用Model表示出來:

import time, uuidfrom orm import Model, StringField, BooleanField, FloatField, TextFielddef next_id():    return ‘%015d%s000‘ % (int(time.time() * 1000), uuid.uuid4().hex)class User(Model):    __table__ = ‘users‘    id = StringField(primary_key=True, default=next_id, ddl=‘varchar(50)‘)    email = StringField(ddl=‘varchar(50)‘)    passwd = StringField(ddl=‘varchar(50)‘)    admin = BooleanField()    name = StringField(ddl=‘varchar(50)‘)    image = StringField(ddl=‘varchar(500)‘)    created_at = FloatField(default=time.time)class Blog(Model):    __table__ = ‘blogs‘    id = StringField(primary_key=True, default=next_id, ddl=‘varchar(50)‘)    user_id = StringField(ddl=‘varchar(50)‘)    user_name = StringField(ddl=‘varchar(50)‘)    user_image = StringField(ddl=‘varchar(500)‘)    name = StringField(ddl=‘varchar(50)‘)    summary = StringField(ddl=‘varchar(200)‘)    content = TextField()    created_at = FloatField(default=time.time)class Comment(Model):    __table__ = ‘comments‘    id = StringField(primary_key=True, default=next_id, ddl=‘varchar(50)‘)    blog_id = StringField(ddl=‘varchar(50)‘)    user_id = StringField(ddl=‘varchar(50)‘)    user_name = StringField(ddl=‘varchar(50)‘)    user_image = StringField(ddl=‘varchar(500)‘)    content = TextField()    created_at = FloatField(default=time.time)

在編寫ORM時,給一個Field增加一個default參數可以讓ORM自己填入預設值,非常方便。並且,預設值可以作為函數對象傳入,在調用save()時自動計算。

例如,主鍵id的預設值是函數next_id,建立時間created_at的預設值是函數time.time,可以自動化佈建當前日期和時間。

日期和時間用float類型儲存在資料庫中,而不是datetime類型,這麼做的好處是不必關心資料庫的時區以及時區轉換問題,排序非常簡單,顯示的時候,只需要做一個floatstr的轉換,也非常容易。

初始化資料庫表

如果表的數量很少,可以手寫建立表的SQL指令碼:

-- schema.sqldrop database if exists awesome;create database awesome;use awesome;grant select, insert, update, delete on awesome.* to ‘www-data‘@‘localhost‘ identified by ‘www-data‘;create table users (    `id` varchar(50) not null,    `email` varchar(50) not null,    `passwd` varchar(50) not null,    `admin` bool not null,    `name` varchar(50) not null,    `image` varchar(500) not null,    `created_at` real not null,    unique key `idx_email` (`email`),    key `idx_created_at` (`created_at`),    primary key (`id`)) engine=innodb default charset=utf8;create table blogs (    `id` varchar(50) not null,    `user_id` varchar(50) not null,    `user_name` varchar(50) not null,    `user_image` varchar(500) not null,    `name` varchar(50) not null,    `summary` varchar(200) not null,    `content` mediumtext not null,    `created_at` real not null,    key `idx_created_at` (`created_at`),    primary key (`id`)) engine=innodb default charset=utf8;create table comments (    `id` varchar(50) not null,    `blog_id` varchar(50) not null,    `user_id` varchar(50) not null,    `user_name` varchar(50) not null,    `user_image` varchar(500) not null,    `content` mediumtext not null,    `created_at` real not null,    key `idx_created_at` (`created_at`),    primary key (`id`)) engine=innodb default charset=utf8;

如果表的數量很多,可以從Model對象直接通過指令碼自動產生SQL指令碼,使用更簡單。

把SQL指令碼放到MySQL命令列裡執行:

$ mysql -u root -p < schema.sql

我們就完成了資料庫表的初始化。

編寫資料存取碼

接下來,就可以真正開始編寫代碼操作對象了。比如,對於User對象,我們就可以做如下操作:

import ormfrom models import User, Blog, Commentdef test():    yield from orm.create_pool(user=‘www-data‘, password=‘www-data‘, database=‘awesome‘)    u = User(name=‘Test‘, email=‘[email protected]‘, passwd=‘1234567890‘, image=‘about:blank‘)    yield from u.save()for x in test():    pass

可以在MySQL用戶端命令列查詢,看看資料是不是正常儲存到MySQL裡面了。

http://www.pdfxs.com/cpgjhegfgncpcfefdfcfdieecfdjebcfefdfcfecedcfdidicfefdicfebefcfeceb/

python 編寫Model

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.