github:https://github.com/mouday/PyThink 說下這個pythink 模塊的作用 背景: 我們公司的主要使用的后端語言有兩種,python和php 
而且有一個專門的DBA管理數據庫,就是說,這個數據庫不是你一個人的,有同組的成員和其他組的成員在使用,好像大部分公司都一樣。 Python爬蟲部分的業務,主要操作是插入;而PHP業務主要是查詢 最開始我使用普通的模塊pymysql ,這樣每次都要去連接,關閉,很麻煩; import pymysql
conn = pymysql.Connect( host='127.0.0.1', port=3306, user='root', passwd='123456', db='test' )
cursor = conn.cursor()
rows = cursor.execute('insert into student(name, age, register_date, gender) values ('xiaoming', 23, '2018-12-30', 'M')') cursor.close() conn.close()
后來使用了peewee 來管理數據庫鏈接,使用Model來創建數據庫(這個時候還沒有人管理數據庫),簡直不要太爽,不寫一行SQL語句就實現了表創建,和數據操作; 后來我這邊的表太多了,業務發展也規范了,專門有人管理數據庫。這樣就不能使用Model直接建表,而是要寫成sql語句給數據庫管理人員,審核完后再進行建表操作 from peewee import *
# 設置數據庫 db = MySQLDatabase('mysql://root:123456@127.0.0.1:3306/demo')
class BaseModel(Model): class Meta: database = db
# 定義數據表 class User(BaseModel): name = CharField()
User.create(name='Tom')
在這種情況下,如果使用Model就必須先寫sql建表,再把所有字段定義寫出來才可以使用,如果涉及的表字段少還好,有時候涉及100多個字段(真的有過),那光是定義就一上午,Model的優勢反而成了累贅,心累; 于是我開始不用Model了,直接使用peewee 提供execute_sql 這樣我們又回到了原生sql的時代; db.execute_sql('insert into student(name, age) values ('Tom', 24)')
一般情況下,會將sql執行的語句和結果封裝到一個函數中。寫的多了,發現很多重復代碼,除了sql不一樣以外,其他格式基本一致。于是需要抽象出來,將相同代碼抽象封裝,以便復用。 于是pythink 出現了,結合了peewee 的操作方式,也保留了一部分原生sql 的格式,比如,增(insert)、刪(delete)、改(update)、查(select)基本保留了sql的關鍵字,不需要額外記憶和區別,而且可以把對表的操作單獨卸載model中,進行統一管理,也可以重寫基類的方法,自己實現自己的業務邏輯(不建議,建議取一個不一樣的函數名字)。 一起感受下其如絲般順滑的操作 安裝 pip install pythink
代碼示例 mysql> use demo; mysql> select * from student limit 2; +----+------+------+------+ | id | name | age | sex | +----+------+------+------+ | 1 | Tom | 24 | 1 | | 2 | jack | 23 | 0 | +----+------+------+------+ 2 rows in set (0.00 sec)
# -*- coding: utf-8 -*-
from pythink import ThinkModel from playhouse.db_url import connect
# 1、使用peewee進行數據庫連接 db = connect('mysql://root:123456@127.0.0.1:3306/demo')
# 2、繼承 ThinkModel 實現自己的類 class StudentThinkModel(ThinkModel): table_name = 'student' database = db
# 3、數據插入insert data = { 'name': 'Tom', 'age': 24 }
result = StudentThinkModel.insert(data) print(result) # 1
# 4、刪除 result = StudentThinkModel.delete(13) print(result) # 1
# 5、修改 data = { 'name': 'Tom', 'age': 24 } result = StudentThinkModel.update(1, data) print(result) # 1
# 6、查詢數據庫中 id=1 的 name 和 age 兩個字段 students = StudentThinkModel.select(fields=['name', 'age'], where='id=1', limit=1) for student in students: print('name: {}'.format(student.name)) print('age: {}'.format(student.age))
''' name: Tom age: 24 '''
# 7、記得關閉數據庫連接 db.close()
當然還可以進行各種增刪改查,不過還處于測試階段,如果用于正式項目還要注意其執行的結果 (完) 看完本文有收獲?請轉發分享給更多人 關注「Python那些事」,做全棧開發工程師
|