vSQL是一個關係映射型(ORM)數據庫框架,並將常用的數據庫相關操作進行封裝,可以不用編寫一行SQL語句就能使數據庫完成 建表、刪表、對錶的増、刪、改、查等操作。
github : https://github.com/VoterLin/vSQL
項目結構:
vSQL
|-__init__.py
|- vattr.py
|- vorm.py
|_ db.json 打開此文件,在對應位置輸入值(host,user,password,database)。
如何使用:
0.導入包:
將vSQL放入到項目包中。導入vSQL包例:創建Model.py文件
from vSQL.vorm import Module
from vSQL.vattr import *
1.創建
根據你想要創建的表名和列名創建相應的類(使該類繼承vorm中的Module類)和類屬性。
例如:(同樣在Model.py)
# 創建一個名爲News的表(table)
class News(Module):
id = column(zintger(20), isAutocount=True, isPrimary=True, isNotnull=True)
name = column(zchar(20), isNotnull=True)
# 分別創建id,name兩個列
(注意,要想編寫__init__構造函數,請務必調用super().__init__(),否則會報錯)
當創建如上述代碼中的類時。等效於SQL語句中的:
CREATE TABLE IF NOT EXISTS News(id INTEGER(20) AUTO_INCREMENT PRIMARY KEY NOT NULL, name CHAR(20) NOT NULL)
之後程序就會自動幫你創建出該表與其列。
2.插入
創建Test.py文件
from Model import *
# 從Model.py中導入
def main():
News(name='VoterLin').insert()
# insert() 方法中可設置參數getback爲True,
news = News(name='VoterLin').insert(getback)
id = news.id
# 由於id被AUTO_INCREMENT約束,在數據插入時,將會自動生成。
# 此時需要獲得插入後生成的id時。就可以用getback參數。
等效於SQL語句中的:
INSERT INTO News (id, name) VALUES (123456, 'VoterLin')
查找
def main()
# 獲取對應的查詢結果(數組)
newsList = News(id=123456).select()
# 獲取第一個查詢結果(News實例)
news = News(id=123456).select(getone=True)
# 只需在select方法中定義getone爲True就行
等效於SQL語句中的:
SELECT * FROM News WHERE id = 123456
也可以不賦值
newsList = News().select()
等效於SQL語句中的:
SELECT * FROM News
其返回值newsList的是包含查找結果的數組,其中每一項是一個News類型。打印newsList的結果:
for news in newsList:
print(news.id, news.name)
除了上述方法以外還可以添加其他的約束條件:
newsList = News(name='Lin').select(oderby='id', isasc=True, limit=5)
等效於SQL語句中的
SELECT * FROM News WHERE name = 'Lin' ODER BY id ASC LIMIT 5
詳細
由上述已知vSQL的基本操作。接下來是詳細內容
1.column類
還是這個例子:
class News(Module):
id = column(zintger(20), isAutocount=True, isPrimary=True, isNotnull=True)
name = column(zchar(20), isNotnull=True)
其中給列賦值的column是一個類。column類的構造方法中可以傳入以下參數:
參數 參數類型 默認值 對應sql
type method None CHAR / VARCHAR / INTEGER / DOUBLE / DATETIME / DATE / TIME
isPrimary bool False PRIMARY KEY
isAutocount bool False AUTO_INCREMENT
isNotnull bool False NOT NULL
按上述參數全部賦值就是下面這樣:
col = column(zchar(20), isPrimary=True, isAutocount=True, isNotnull=True)
等效於SQL語句中的:
col CHAR(20) AUTO_INCREMENT PRIMARY KEY NOT NULL
column中的type參數
按之前的代碼應該可以大致知道,type就對應SQL語句中相應的類型(如 CHAR / VARCHAR / INTEGER 等等...)。我在vSQL中現在只編寫了一小部分類型。
type 必傳入參數 可傳入參數 對應sql
zbool() default TINYINT
zchar() size default CHAR
zvarchar() size default VARCHAR
zintger() size/default/isunsigned INTGER
zdouble() size_M/size_D default/isunsigned DOUBLE
zdatetime() default DATETIME
zdate() default DATE
ztime() default TIME
# 賦值給default,給該字段一個默認值
# 賦值給isunsigned,是設 整形/浮點型 爲無符號
2.Module類
通過上述代碼知道繼承Module後,就在可以相應的在MySQL數據庫中創建表與列。並且擁有了 select/insert 等方法下面是繼承Module類後可以調用的方法,詳解:
可調用方法 參數
insert() getback
update() getback
select() islike/oderby/isasc/limit/iscount/getone
create() 無(子類調用時,創建相應的表,一般是不需要調用此方法的,可以與drop()配合使用)
drop() 無(子類調用時,刪除相應的表)
isexists() 無(子類調用時,判斷相應的表是否存在,與前兩個方法配合使用)