乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      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爬蟲部分的業(yè)務(wù),主要操作是插入;而PHP業(yè)務(wù)主要是查詢

      最開始我使用普通的模塊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í)候還沒有人管理數(shù)據(jù)庫(kù)),簡(jiǎn)直不要太爽,不寫一行SQL語(yǔ)句就實(shí)現(xiàn)了表創(chuàng)建,和數(shù)據(jù)操作;

      后來(lái)我這邊的表太多了,業(yè)務(wù)發(fā)展也規(guī)范了,專門有人管理數(shù)據(jù)庫(kù)。這樣就不能使用Model直接建表,而是要寫成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就必須先寫sql建表,再把所有字段定義寫出來(lái)才可以使用,如果涉及的表字段少還好,有時(shí)候涉及100多個(gè)字段(真的有過(guò)),那光是定義就一上午,Model的優(yōu)勢(shì)反而成了累贅,心累;

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

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

      一般情況下,會(huì)將sql執(zhí)行的語(yǔ)句和結(jié)果封裝到一個(gè)函數(shù)中。寫的多了,發(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)一管理,也可以重寫基類的方法,自己實(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那些事」,做全棧開發(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)論公約

        類似文章 更多