小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

Python編程:使用pythink查詢數(shù)據(jù)庫

 CharlseShan 2019-04-16

github:https://github.com/mouday/PyThink

說下這個pythink模塊的作用

背景:
我們公司的主要使用的后端語言有兩種,python和php

而且有一個專門的DBA管理數(shù)據(jù)庫,就是說,這個數(shù)據(jù)庫不是你一個人的,有同組的成員和其他組的成員在使用,好像大部分公司都一樣。

Python爬蟲部分的業(yè)務,主要操作是插入;而PHP業(yè)務主要是查詢

最開始我使用普通的模塊pymysql,這樣每次都要去連接,關(guān)閉,很麻煩;

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 來管理數(shù)據(jù)庫鏈接,使用Model來創(chuàng)建數(shù)據(jù)庫(這個時候還沒有人管理數(shù)據(jù)庫),簡直不要太爽,不寫一行SQL語句就實現(xiàn)了表創(chuàng)建,和數(shù)據(jù)操作;

后來我這邊的表太多了,業(yè)務發(fā)展也規(guī)范了,專門有人管理數(shù)據(jù)庫。這樣就不能使用Model直接建表,而是要寫成sql語句給數(shù)據(jù)庫管理人員,審核完后再進行建表操作

from peewee import *

# 設(shè)置數(shù)據(jù)庫
db = MySQLDatabase('mysql://root:123456@127.0.0.1:3306/demo')

class BaseModel(Model):
class Meta:
database = db

# 定義數(shù)據(jù)表
class User(BaseModel):
name = CharField()

User.create(name='Tom')

在這種情況下,如果使用Model就必須先寫sql建表,再把所有字段定義寫出來才可以使用,如果涉及的表字段少還好,有時候涉及100多個字段(真的有過),那光是定義就一上午,Model的優(yōu)勢反而成了累贅,心累;

于是我開始不用Model了,直接使用peewee 提供execute_sql 這樣我們又回到了原生sql的時代;

db.execute_sql('insert into student(name, age) values ('Tom', 24)')

一般情況下,會將sql執(zhí)行的語句和結(jié)果封裝到一個函數(shù)中。寫的多了,發(fā)現(xiàn)很多重復代碼,除了sql不一樣以外,其他格式基本一致。于是需要抽象出來,將相同代碼抽象封裝,以便復用。

于是pythink 出現(xiàn)了,結(jié)合了peewee 的操作方式,也保留了一部分原生sql 的格式,比如,增(insert)、刪(delete)、改(update)、查(select)基本保留了sql的關(guān)鍵字,不需要額外記憶和區(qū)別,而且可以把對表的操作單獨卸載model中,進行統(tǒng)一管理,也可以重寫基類的方法,自己實現(xiàn)自己的業(yè)務邏輯(不建議,建議取一個不一樣的函數(shù)名字)。

一起感受下其如絲般順滑的操作

安裝

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進行數(shù)據(jù)庫連接
db = connect('mysql://root:123456@127.0.0.1:3306/demo')

# 2、繼承 ThinkModel 實現(xiàn)自己的類
class StudentThinkModel(ThinkModel):
table_name = 'student'
database = db

# 3、數(shù)據(jù)插入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、查詢數(shù)據(jù)庫中 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、記得關(guān)閉數(shù)據(jù)庫連接
db.close()

當然還可以進行各種增刪改查,不過還處于測試階段,如果用于正式項目還要注意其執(zhí)行的結(jié)果

(完)

看完本文有收獲?請轉(zhuǎn)發(fā)分享給更多人

關(guān)注「Python那些事」,做全棧開發(fā)工程師

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多