本文主要讲述python使用Pymysql连接数据库并写入数据
1.首先讲连接数据库
#!/usr/bin/python
# -*- coding: UTF-8 -*-
#首先导入模块pymysql,若出现报错没有此模块,就pip install pymysql
import os,sys,pymysql
#使用cursor()方法创建游标对象cursor
cursor = db.cursor()
#使用execute()方法执行sql查询当前版本
cursor.execute('select version()')
#使用fetchone()方法获取单条数据
data = cursor.fetchone()
print ("Database version : %s " % data)
# 关闭游标
cursor.close()
# 关闭数据库连接
db.close()
2.用python执行shell命令,调用os模块
def get_ip():
#使用os.popen模块执行shell命令查看本机ip,注意外围使用双引号而非单引号,并且假设默认是第一个网卡,特殊环境请适当修改代码
#out = os.popen("ifconfig enp0s3 | grep 'inet '|awk '{print $2}'").read()
out = os.popen("ifconfig|grep -oP '(?<=inet addr:)(?=(?!127\.0\.0\.1))\d+(\.\d+){3}'").read()
out = out.strip() #此步骤是因为去头尾多余的空格,以免插入数据库出现格式问题;
print (out)
3.用python执行shell脚本,调用os.system
# 使用 os.system执行shell脚本
p = os.system("../shell/rtc-server-monitor-log.sh")
4.完整代码
#!/usr/bin/python
# -*- coding: UTF-8 -*-
#首先导入模块pymysql,若出现报错没有此模块,就pip install pymysql
import os,sys,pymysql
def get_ip():
#使用os.popen模块执行shell命令查看本机ip,注意外围使用双引号而非单引号,并且假设默认是第一个网卡,特殊环境请适当修改代码
#out = os.popen("ifconfig enp0s3 | grep 'inet '|awk '{print $2}'").read()
out = os.popen("ifconfig|grep -oP '(?<=inet addr:)(?=(?!127\.0\.0\.1))\d+(\.\d+){3}'").read()
out = out.strip() #此步骤是因为去头尾多余的空格,以免插入数据库出现格式问题;
# print (out)
res = out
return res
# 使用 os.system执行shell脚本
p = os.system("../shell/rtc-server-monitor-log.sh")
#print(p")
#使用cursor()方法创建游标对象cursor
cursor = db.cursor()
#使用execute()方法执行sql查询当前版本
cursor.execute('select version()')
#使用fetchone()方法获取单条数据
data = cursor.fetchone()
print ("Database version : %s " % data)
#T = []
#for num in range(p)
# T.append((num)) # 注意要用两个括号括起来
#sql插入语句:
#sql = """INSERT INTO rtc_excep_task(ip,任务id,告警类型)
# VALUES ('10.114.123.45','31184','1')"""
#open_file = open('/tmp/rtc-server-log-fail')
#ith open("/tmp/rtc-server-log-fail") as f
#运行前清空数据表;
cursor.execute('delete from rtc_excep_task')
print('清空表rtc_excep_task完成!')
#数据库插入语句
sql = """INSERT INTO rtc_excep_task(IP,TASKID,DATE,ERRORSYSTEM)
VALUES (%s,%s,%s,%s)"""
try:
#读取linux文件并且取字段值
with open("/tmp/rtc-server-log-fail") as f:
for line in f.readlines():
line = line.strip() #去掉每行头尾空白
_nodes = line.split(' ')#以空格为分隔符提取字段
id = _nodes[1]
DATE = _nodes[0]
#print(id)
#print(DATE)
system = "1"
#out = get_ip()
ipl = []
#ip = out
ip = get_ip()
ipl.append(ip)
print(ipl)
#print(type(ipl))
# 执行sql语句
cursor.execute(sql,(ip,id,DATE,system))
# 提交到数据库执行
db.commit()
print ("数据库插入成功!")
# count += 1
except Exception as e :
print(e)
# 如果发生错误则回滚
db.rollback()
print("数据库插入不成功,已回滚!")
# 关闭游标
cursor.close()
# 关闭数据库连接
db.close()
运行结果:
[appdeploy@CNSZ17VLK0922:/app/anaconda2/bin]$/app/anaconda2/bin/python /app/python/rtc-monitor-server.py
清空表rtc_excep_task完成!
['192.168.56.33']
数据库插入成功!