vSQL : 基於pymysql的關係映射型(ORM)數據庫框架

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()      無(子類調用時,判斷相應的表是否存在,與前兩個方法配合使用)


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章