運用Python語言編寫獲取Linux基本系統信息(三):Python與數據庫編程,把獲取的信息存入數據庫

jopen 10年前發布 | 41K 次閱讀 數據庫 Linux Python 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~備注:博客園就行~這樣我有什么問題就可以很輕松的問了!大家一起進步~~~~~最近工作比較忙所以這一篇更得比較慢~

來自: http://www.cnblogs.com/soysaucejyz/p/5090403.html

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!