本章節講解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 這裡...