python學習——編寫Model
有了ORM,我們就可以把Web App需要的3個表用Model
表示出來:
import time, uuid
from orm import Model, StringField, BooleanField, FloatField, TextField
def 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
型別,這麼做的好處是不必關心資料庫的時區以及時區轉換問題,排序非常簡單,顯示的時候,只需要做一個float
到str
的轉換,也非常容易。
初始化資料庫表
如果表的數量很少,可以手寫建立表的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,
`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 orm
from models import User, Blog, Comment
def 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裡面了。
相關推薦
python學習——編寫Model
有了ORM,我們就可以把Web App需要的3個表用Model表示出來: import time, uuid from orm import Model, StringField, BooleanField, FloatField, TextField def nex
python學習——編寫web框架
在正式開始Web開發前,我們需要編寫一個Web框架。 aiohttp已經是一個Web框架了,為什麼我們還需要自己封裝一個? 原因是從使用者的角度來說,aiohttp相對比較底層,編寫一個URL的處理函式需要這麼幾步: 第一步,編寫一個用@asyncio.corout
python 編寫Model
好處 寫代碼 schema 並且 表示 targe mode local ref 有了ORM,我們就可以把Web App需要的3個表用Model表示出來: import time, uuid from orm import Model, StringField, B
python學習基礎篇--編寫登陸接口
-- strip() 不存在 rip 三次 輸入 for循環 循環 是否 #!/usr/bin/env python#_*_conding:utf-8_*_#-----------------------------------------------------#編寫登陸
Python學習之編寫登陸認證程序
inpu file 存儲 提示 用戶鎖定 通過 允許 odin 判斷 需求: 讓用戶輸入用戶名密碼 認證成功後顯示歡迎信息 輸錯三次後退出程序 可以支持多個用戶登錄 (提示,通過列表存多個賬戶信息) 用戶3次認證失敗後,退出程序,再次啟動程序嘗試登錄時,還是鎖定狀態(提示:
python學習總結(一),第一個python程序的編寫
程序代碼 spa 編碼 結構 編輯 下載地址 utf 修改編碼 general 1. python是一種解釋性,編譯型,互動型的語言,面向對象,動態數據類型的高級程序設計語言。 1.1 交互式:意味著可以在一個提示符直接交互執行你寫的程序。 1.2 解釋型:意味著開發過程中
python學習之網站的編寫(HTML,CSS,JS)(十七)----------示例,構造一個網頁的框架,上部標題,登入,logo,左側選單,右側內容,原始碼
結果: 顏色為了明顯,所以較為難看,可以根據自己的需要進行更改 原始碼: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title
python學習之網站的編寫(HTML,CSS,JS)(十六)----------示例,構造一個左側管理選單的功能,點選主選單才顯示下面的內容
結果: 程式碼: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>逆水行舟不進則退</title>
python學習之網站的編寫(HTML,CSS,JS)(十五)----------示例,彈出一個背景為半黑色,前面是白框的彈窗功能(已經編好的框架)
效果圖,程式碼直接可應用,按自己的需要在其中加入想要的內容: 程式碼及講解: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <
python學習之網站的編寫(HTML,CSS,JS)(十四)----------CSS的display行內標籤和塊級標籤的轉換,控制標籤是否顯示
行內標籤:有多大就佔多大,無法設定高度,寬度和邊距。 塊級標籤:佔一行,可以設定高度,寬度和邊距。 塊級標籤轉為行內標籤:display:inline 行內標籤轉為塊級標籤:display:block 還有一個特殊的轉換,既包含塊級標籤的屬性,又具有行內標籤的屬性,自己有多少佔多少,
python學習之網站的編寫(HTML,CSS,JS)(十三)----------CSS字型和對齊方式的設定
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>逆水行舟不進則退</title> </head> <b
python學習之網站的編寫(HTML,CSS,JS)(十二)----------CSS邊框的編寫
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>逆水行舟不進則退</title> </head> <b
python學習之網站的編寫(HTML,CSS,JS)(十一)----------如何利用其它html檔案中的CSS(也就是可以將共同的地方提取出來,放大一個檔案中,利於使用)
首先說一下它的具體用處,我們已經知道,當我們寫一個html檔案的時候,不同的標籤想用相同的版式的時候,我們可以將它提取出來,然後再用一些選擇器進行應用,比如class選擇器。但是,但我們編寫多個html檔案中的時候,多個檔案都想用一些相同的版式該怎麼辦呢? 那麼就引入了這種連線的方式,首先寫一個
python學習之網站的編寫(HTML,CSS,JS)(十)----------CSS中用的最多的class選擇器,批量的為一些標籤設定相同的版式
選擇器有很多種,有id選擇器,div選擇器,層級選擇器,組合選擇器等等,然而,用的最多的就是class選擇器,它的作用是為下面所有符合class規則的標籤設定上相同的版式。 步驟: 1.在頭部編寫<style>標籤,點+class選擇器的名稱(也就是下面需要選擇的class),然
python學習之網站的編寫(HTML,CSS,JS)(九)----------table標籤,表格的實現
table標籤,裡邊的tr表示行,td表示列。 程式碼: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>逆水行
python學習之網站的編寫(HTML,CSS,JS)(八)----------label標籤,點選label標籤的文字將編輯的游標移過來
如果不加label的話,只設置值的話,點選文字是不能將編輯的游標移過來的,必須將id連線上之後,才可以實現,點選文字就可以將編輯的游標移過來。 實現結果: 程式碼: <!DOCTYPE html> <html lang="en"> <hea
python學習之網站的編寫(HTML,CSS,JS)(七)----------以列表條目的方式顯示
話不多說,直接上圖 實現的程式碼及解釋: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>逆水行舟不進則退</t
python學習手冊(第4版) 第二十二章 模組程式碼編寫基礎
1.再次溫習python程式結構: 程式由模組組成,模組中包含語句,語句中包含表示式,表示式建立並處理物件。 2.多次匯入模組時,實際執行中,模組只被匯入一次。同時,模組內的語句在第一次被匯入時執行,包括對類和函式的載入,但函式只有在被呼叫時執行。 3.關於fr
python學習之網站的編寫(HTML,CSS,JS)(一)---------------------------------------初識(初學者需瞭解)
首先推薦一款很好的python編譯軟體pycharm,但凡接觸過python的人對它一定不是很陌生,在這裡我們就可以編輯一些瀏覽器認識的html檔案,創造出我們喜歡的網站頁面,在pycharm中建立一個html檔案是下面這樣的,然後我們會對其一句一句的解釋。 <!DO
python學習之網站的編寫(HTML,CSS,JS)(三)----------input系列的標籤詳解及示例程式碼(可上傳到伺服器form標籤)
文章編排,我們首先來講一下input系列的各種內容,然後用一個示例程式碼來清晰的理解其中特定的含義 input系列: 1.輸入文字內容: <input type="text" name="user"/>起個名字易於在伺服器端進行處理 2.輸入密碼內容: