編寫Python的web框架中的Model的教程
有了ORM,我們就可以把Web App需要的3個(gè)表用Model表示出來:
import time, uuid from transwarp.db import next_id from transwarp.orm import Model, StringField, BooleanField, FloatField, TextField class User(Model): __table__ = 'users' id = StringField(primary_key=True, default=next_id, ddl='varchar(50)') email = StringField(updatable=False, ddl='varchar(50)') password = StringField(ddl='varchar(50)') admin = BooleanField() name = StringField(ddl='varchar(50)') image = StringField(ddl='varchar(500)') created_at = FloatField(updatable=False, default=time.time) class Blog(Model): __table__ = 'blogs' id = StringField(primary_key=True, default=next_id, ddl='varchar(50)') user_id = StringField(updatable=False, 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(updatable=False, default=time.time) class Comment(Model): __table__ = 'comments' id = StringField(primary_key=True, default=next_id, ddl='varchar(50)') blog_id = StringField(updatable=False, ddl='varchar(50)') user_id = StringField(updatable=False, ddl='varchar(50)') user_name = StringField(ddl='varchar(50)') user_image = StringField(ddl='varchar(500)') content = TextField() created_at = FloatField(updatable=False, default=time.time)
在編寫ORM時(shí),給一個(gè)Field增加一個(gè)default參數(shù)可以讓ORM自己填入缺省值,非常方便。并且,缺省值可以作為函數(shù)對(duì)象傳入,在調(diào)用insert()時(shí)自動(dòng)計(jì)算。
例如,主鍵id的缺省值是函數(shù)next_id,創(chuàng)建時(shí)間created_at的缺省值是函數(shù)time.time,可以自動(dòng)設(shè)置當(dāng)前日期和時(shí)間。
日期和時(shí)間用float類型存儲(chǔ)在數(shù)據(jù)庫中,而不是datetime類型,這么做的好處是不必關(guān)心數(shù)據(jù)庫的時(shí)區(qū)以及時(shí)區(qū)轉(zhuǎn)換問題,排序非常簡(jiǎn)單,顯示的時(shí)候,只需要做一個(gè)float到str的轉(zhuǎn)換,也非常容易。
初始化數(shù)據(jù)庫表
如果表的數(shù)量很少,可以手寫創(chuàng)建表的SQL腳本:
-- schema.sql drop 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, `password` 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;
如果表的數(shù)量很多,可以從Model對(duì)象直接通過腳本自動(dòng)生成SQL腳本,使用更簡(jiǎn)單。
把SQL腳本放到MySQL命令行里執(zhí)行:
$ mysql -u root -p < schema.sql
我們就完成了數(shù)據(jù)庫表的初始化。
編寫數(shù)據(jù)訪問代碼
接下來,就可以真正開始編寫代碼操作對(duì)象了。比如,對(duì)于User對(duì)象,我們就可以做如下操作:
# test_db.py
from models import User, Blog, Comment
from transwarp import db
db.create_engine(user='www-data', password='www-data', database='awesome')
u = User(name='Test', email='test@example.com', password='1234567890', image='about:blank')
u.insert()
print 'new user id:', u.id
u1 = User.find_first('where email=?', 'test@example.com')
print 'find user\'s name:', u1.name
u1.delete()
u2 = User.find_first('where email=?', 'test@example.com')
print 'find user:', u2
可以在MySQL客戶端命令行查詢,看看數(shù)據(jù)是不是正常存儲(chǔ)到MySQL里面了。
相關(guān)文章
Python 實(shí)現(xiàn)一個(gè)顏色色值轉(zhuǎn)換的小工具
這篇文章主要介紹了Python 實(shí)現(xiàn)一個(gè)顏色色值轉(zhuǎn)換的小工具的相關(guān)資料,需要的朋友可以參考下2016-12-12
python實(shí)現(xiàn)基于兩張圖片生成圓角圖標(biāo)效果的方法
這篇文章主要介紹了python實(shí)現(xiàn)基于兩張圖片生成圓角圖標(biāo)效果的方法,實(shí)例分析了Python使用pil模塊進(jìn)行圖片處理的技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-03-03
Python利用pdfplumber實(shí)現(xiàn)讀取PDF寫入Excel
pdfplumber專注PDF內(nèi)容提取,例如文本(位置、字體及顏色等)和形狀(矩形、直線、曲線),還有解析表格的功能。本文主要為大家介紹如何利用pdfplumber實(shí)現(xiàn)讀取PDF寫入Excel,需要的可以參考一下2022-06-06
pycharm中import呈現(xiàn)灰色原因的解決方法
這篇文章主要介紹了pycharm中import呈現(xiàn)灰色原因的解決方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-03-03
python滑塊驗(yàn)證碼的破解實(shí)現(xiàn)
這篇文章主要介紹了python滑塊驗(yàn)證碼的破解實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-11-11
Pandas如何將表格的前幾行生成html實(shí)戰(zhàn)案例
這篇文章主要介紹了Pandas如何將表格的前幾行生成html實(shí)戰(zhàn)案例,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下2022-08-08

