運用Python語言編寫獲取Linux基本系統信息(三):Python與數據庫編程,把獲取的信息存入數據庫
有關前兩篇的鏈接:
運用Python語言編寫獲取Linux基本系統信息(一):獲得Linux版本、內核、當前時間
運用Python語言編寫獲取Linux基本系統信息(二):文件系統使用情況獲取
一、實驗環境:
Python2.7.10、pycharm、VM虛擬機、CentOS6.3、mysql
二、MySQLdb模塊:
MySQLdb模式是Python中專門連接MySQL數據庫的模塊,另外Python開發環境的搭建真心感覺比其他的麻煩好多。。。這次光安裝這個MySQLdb這個模塊就花了好長時間,遇到好多問題,不過幸好還是成功使用上了,稍后我會加上一篇我是怎么安裝的教程,會列出我遇到的問題供大家參考。
三、實現:
這里先介紹一下數據庫,我們使用的是安裝在CentOS上的MySQL數據庫。數據庫的安裝這里不做介紹。
在MySQL中我們把所有表放在名為linux的數據庫中,數據庫包含兩張表:存放linux信息數據的linux表中,存放硬盤數據的fdisk表中
這兩個表的SQL:
1 CREATE TABLE linux //linux表 2 ( 3 os_version VARCHAR(1000) NOT NULL, 4 os_kernal VARCHAR(1000) not NULL, 5 os_data VARCHAR(1000) PRIMARY KEY, 6 ) 7 8 CREATE TABLE fdisk //fdisk表 9 ( 10 f_date TIMESTAMP(14) NOT NULL, 11 filesystem VARCHAR(1000) NOT NULL, 12 rom VARCHAR(1000) not NULL, 13 used VARCHAR(1000) not NULL, 14 not_used VARCHAR(1000) not NULL, 15 used_per VARCHAR(1000) NOT NULL, 16 mount VARCHAR(1000) not NULL 17 )
所有對于表的操作都在一個py文件中,包括插入和查詢操作
mysql_db.py
1 #coding=UTF-8
2 import MySQLdb
3 import _mysql_exceptions
4 createlinuxsql = """
5 CREATE TABLE linux
6 (
7 os_version VARCHAR(1000) NOT NULL,
8 os_kernal VARCHAR(1000) not NULL,
9 os_data VARCHAR(1000) PRIMARY KEY,
10
11 )
12 """
13 createfdisksql = """
14 CREATE TABLE fdisk
15 (
16 f_date TIMESTAMP(14) NOT NULL,
17 filesystem VARCHAR(1000) NOT NULL,
18 rom VARCHAR(1000) not NULL,
19 used VARCHAR(1000) not NULL,
20 not_used VARCHAR(1000) not NULL,
21 used_per VARCHAR(1000) NOT NULL,
22 mount VARCHAR(1000) not NULL
23 )
24 """
25 class mysql:
26 def __init__(self):
27 try:
28 self.conn = MySQLdb.connect(host='192.168.179.129',user='root',passwd='ro',db='linux')
29 self.cur = self.conn.cursor()
30 except _mysql_exceptions.OperationalError,e:
31 print '數據庫無法連接'
32 def __del__(self):
33 self.cur.close()
34 self.conn.commit()
35 self.conn.close()
36 def select(self):
37 try:
38 self.cur.execute("select * from linux")
39 for each in self.cur.fetchall():
40 print each
41 except _mysql_exceptions.ProgrammingError,e:
42 self.cur.execute(createlinuxsql)
43 def os_insert(self,version,kernal,data):
44 try:
45 self.cur.execute("insert into linux VALUES ('%s','%s','%s')"% (version,kernal,data))
46 except _mysql_exceptions.ProgrammingError,e:
47 self.cur.execute(createlinuxsql)
48 self.cur.execute("insert into linux VALUES ('%s','%s','%s')"% (version,kernal,data))
49 def fdisk_select(self):
50 try:
51 self.cur.execute("select * from fdisk")
52 print self.cur.fetchall()
53 except _mysql_exceptions.ProgrammingError,e:
54 self.cur.execute(createfdisksql)
55 def fdisk_insert(self,filesystemz,romz,usedz,nousedz,usedperz,mountz):
56 try:
57 self.cur.execute("insert into fdisk(filesystem,rom,used,not_used,used_per,mount) \
58 VALUES ('%s','%s','%s','%s','%s','%s')"% (filesystemz,\
59 romz,usedz,nousedz,usedperz,mountz))
60 except _mysql_exceptions.ProgrammingError,e:
61 self.cur.execute(createfdisksql)
62 self.cur.execute("insert into fdisk(filesystem,rom,used,not_used,used_per,mount) \
63 VALUES ('%s','%s','%s','%s','%s','%s')"% (filesystemz,\
64 romz,usedz,nousedz,usedperz,mountz)) 不用去手動建立表,只要數據庫存在會自動建立表的
同時對以前的一些代碼進行了更新,更新只填寫變動
os_info.py:
1 # coding=UTF-8 2 import linux_status 3 import os_info_in 4 from mysql_db import mysql 5 class os_info: 6 def __init__(self): 7 # self.linux_stat=linux_status.linux_status() 8 self.os_infos_in= os_info_in.os_info_in() 9 def os_info(self): 10 self.linux_stat=linux_status.linux_status() 11 self.linux_stat.os_version = self.os_infos_in.os_version() 12 self.linux_stat.os_kernal = self.os_infos_in.os_kernel() 13 self.linux_stat.os_date = self.os_infos_in.os_date() 14 return self.linux_stat 15 def os_in_mysql(self): 16 os_db=mysql() 17 os_db.os_insert(self.os_infos_in.os_version(),self.os_infos_in.os_kernel(),self.os_infos_in.os_date())
linux_fdisk.py:
def fdisk_mysql(self):
self.fdisk_mysql=mysql()
i=0
j=1
while j==1:
try:
self.fdisk_mysql.fdisk_insert(self.disk_info[i],self.disk_info[i+1],self.disk_info[i+2],\
self.disk_info[i+3],self.disk_info[i+4],self.disk_info[i+5])
i=i+6
except Exception,e:
j=0 四、結果展示:
mysql不支持顯示中文,把linux改為英文就可以了(export LANG=en_US)
最后~
這個系列就先寫到這吧~~等以后有啥新的想法會繼續寫的~~
歡迎大神加我QQ:707475486~備注:博客園就行~這樣我有什么問題就可以很輕松的問了!大家一起進步~~~~~最近工作比較忙所以這一篇更得比較慢~
本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!