第十三章 Python資料庫程式設計

2021-09-04 22:50:15 字數 4372 閱讀 9177

本章節講解python運算元據庫,完成簡單的增刪改查工作,以mysql資料庫為例。

python的mysql資料庫操作模組叫mysqldb,需要額外的安裝下。

通過pip工具安裝:pip install mysqldb

mysqldb模組,我們主要就用到連線資料庫的方法mysqldb.connect(),連線上資料庫後,再使用一些方法做相應的操作。

mysqldb.connect(parameters...)方法提供了以下一些常用的引數:

引數

描述

host

資料庫位址

user

資料庫使用者名稱,

passwd

資料庫密碼,預設為空

db資料庫庫名,沒有預設庫

port

資料庫埠,預設3306

connect_timeout

連線超時時間,秒為單位

use_unicode

結果以unicode字串返回

charset

插入資料庫編碼

連線物件返回的connect()函式:

commit()

提交事務。對支援事務的資料庫和表,如果提交修改操作,不適用這個方法,則不會寫到資料庫中

rollback()

事務回滾。對支援事務的資料庫和表,如果執行此方法,則回滾當前事務。在沒有commit()前提下。

cursor([cursorclass])

建立乙個游標物件。所有的sql語句的執行都要在游標物件下進行。mysql本身不支援游標,mysqldb模組對其游標進行了**。

游標物件也提供了幾種方法:

close()

關閉游標

execute(sql)

執行sql語句

excutemany(sql)

執行多條sql語句

fetchone()

從執行結果中取第一條記錄

fetchmany(n)

從執行結果中取n條記錄

fetchall()

從執行結果中取所有記錄

scroll(self, value, mode='relative')

游標滾動

qq群:323779636(shell/python運維開發群)

13.1 資料庫增刪改查

13.1.1 在test庫建立一張user表,並新增一條記錄

>>> conn = mysqldb.connect(host='192.168.1.244',user='root',passwd='qhyctaji',db='test',charset='utf8')

>>> cursor = conn.cursor()

>>> sql = "create table user(id int,name varchar(30),password varchar(30))"

>>> cursor.execute(sql)   # 返回的數字是影響的行數

0l    

>>> sql = "insert into user(id,name,password) values('1','xiaoming','123456')"

>>> cursor.execute(sql)

1l>>> conn.commit()  # 提交事務,寫入到資料庫

>>> cursor.execute('show tables')  # 檢視建立的表

1l>>> cursor.fetchall()  # 返回上乙個游標執行的所有結果,預設是以元組形式返回

((u'user',),)

>>> cursor.execute('select * from user')           

1l>>> cursor.fetchall()

((1l, u'xiaoming', u'123456'),)

13.1.2 插入多條資料

>>> sql = 'insert into user(id,name,password) values(%s,%s,%s)'

>>> args = [('2','zhangsan','123456'), ('3','lisi','123456'),('4','wangwu','123456')] 

>>> cursor.executemany(sql, args)

3l>>> conn.commit()

>>> sql = 'select * from user'

>>> cursor.execute(sql)

4l>>> cursor.fetchall()

((1l, u'xiaoming', u'123456'), (2l, u'zhangsan', u'123456'), (3l, u'lisi', u'123456'), (4l, u'wangwu', u'123456'))

args變數是乙個包含多元組的列表,每個元組對應著每條記錄。當查詢多條記錄時,使用此方法,可有效提高插入效率。

13.1.3 刪除使用者名稱xiaoming的記錄

>>> sql = 'delete from user where name="xiaoming"'

>>> cursor.execute(sql)                           

1l>>> conn.commit()

>>> sql = 'select * from user'                   

>>> cursor.execute(sql)       

3l>>> cursor.fetchall()         

((2l, u'zhangsan', u'123456'), (3l, u'lisi', u'123456'), (4l, u'wangwu', u'123456'))

13.1.4 查詢記錄

>>> sql = 'select * from user' 

>>> cursor.execute(sql)         

3l>>> cursor.fetchone()   # 獲取第一條記錄

(2l, u'zhangsan', u'123456')

>>> sql = 'select * from user' 

>>> cursor.execute(sql)         

3l>>> cursor.fetchmany(2) # 獲取兩條記錄

((2l, u'zhangsan', u'123456'), (3l, u'lisi', u'123456'))

13.1.4 以字典形式返回結果

預設顯示是元組形式,要想返回字典形式,使得更易處理,就用到cursor([cursorclass])中的cusorclass引數。

傳入mysqldb.cursors.dictcursor類:

>>> cursor = conn.cursor(mysqldb.cursors.dictcursor)

>>> sql = 'select * from user'

>>> cursor.execute(sql)

3l>>> cursor.fetchall()

(, , )

13.2 遍歷查詢結果

#!/usr/bin/env python

# -*- coding: utf-8 -*-

import mysqldb

try:

conn = mysqldb.connect(host='127.0.0.1', port=3306, user='root', passwd='123456', connect_timeout=3, charset='utf8')

cursor = conn.cursor()

sql = "select * from user"

cursor.execute(sql)

for i in cursor.fetchall():

print i

except exception, e:

print ("connection error: " + str(e))

finally:

conn.close()

# python test.py

(2l, u'zhangsan', u'123456')

(3l, u'lisi', u'123456')

(4l, u'wangwu', u'123456')

使用for迴圈遍歷查詢結果,並增加了異常處理。

第十三章 基礎資料

資料的及時性 準確性和完整性是企業資訊化管理對資料的3項基本要求。及時 必須在規定的時間內進行和完成資料的採集和處理,資料的價值是有時間性的,過時的資訊不僅沒有價值,還可能造成誤導。準確 就是必須去偽存真 符合實際。完整 滿足系統對各個資料項的規定的要求,沒有任何疏忽和遺漏。保證資料準確的措施 企業...

第十三章 併發

13.1 動機 13.2 基本執行緒 如果必須要控制現成的執行順序,最好是根本不用執行緒,而是自己編寫特定順序彼此控制的協作子程式。繼承thread類或者實現runnable介面。內部類實現。13.3 共享受限資源 1 如果要對類中的某個方法進行同步控制,最好同步所有方法。如果忽略了其中乙個,通常很...

第十三章 類

1.類簡單地說是乙個性的資料型別。類當中有資料成員,和成員函式。類的基本思想就是體現出資料的抽象和封裝。2.這裡只需要說明乙個問題即可 就是類成員函式的const型別 class screen public const int get const int i const int j const 這裡...