日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

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

 CharlseShan 2019-04-16

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

說(shuō)下這個(gè)pythink模塊的作用

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

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

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

最開(kāi)始我使用普通的模塊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()

后來(lái)使用了peewee 來(lái)管理數(shù)據(jù)庫(kù)鏈接,使用Model來(lái)創(chuàng)建數(shù)據(jù)庫(kù)(這個(gè)時(shí)候還沒(méi)有人管理數(shù)據(jù)庫(kù)),簡(jiǎn)直不要太爽,不寫(xiě)一行SQL語(yǔ)句就實(shí)現(xiàn)了表創(chuàng)建,和數(shù)據(jù)操作;

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

from peewee import *

# 設(shè)置數(shù)據(jù)庫(kù)
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就必須先寫(xiě)sql建表,再把所有字段定義寫(xiě)出來(lái)才可以使用,如果涉及的表字段少還好,有時(shí)候涉及100多個(gè)字段(真的有過(guò)),那光是定義就一上午,Model的優(yōu)勢(shì)反而成了累贅,心累;

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

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

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

于是pythink 出現(xiàn)了,結(jié)合了peewee 的操作方式,也保留了一部分原生sql 的格式,比如,增(insert)、刪(delete)、改(update)、查(select)基本保留了sql的關(guān)鍵字,不需要額外記憶和區(qū)別,而且可以把對(duì)表的操作單獨(dú)卸載model中,進(jìn)行統(tǒng)一管理,也可以重寫(xiě)基類的方法,自己實(shí)現(xiàn)自己的業(yè)務(wù)邏輯(不建議,建議取一個(gè)不一樣的函數(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進(jìn)行數(shù)據(jù)庫(kù)連接
db = connect('mysql://root:123456@127.0.0.1:3306/demo')

# 2、繼承 ThinkModel 實(shí)現(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ù)庫(kù)中 id=1 的 name 和 age 兩個(gè)字段
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ù)庫(kù)連接
db.close()

當(dāng)然還可以進(jìn)行各種增刪改查,不過(guò)還處于測(cè)試階段,如果用于正式項(xiàng)目還要注意其執(zhí)行的結(jié)果

(完)

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

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

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

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多