邮件编程
在Linux的终端上,查看邮件服务器是否开启
postfix邮件服务器
mailx是收发邮件的
rpm -q postfix || yum -y install postfix
yum -y install mailx
systemctl start postfix
netstat -utnlp | grep :25
发送并设置邮件
标准邮件需要三个头部信息
From:发件人
To:收件人
Subject:主题
SMTP由它控制信件的中转方式
python 的 smtplib 提供了一种很方便的途径发送电子邮件。它对 smtp 协议进行了简单的封装
sendmail 方法
Python SMTP 对象使用 sendmail 方法发送邮件
sendmail 方法三个必须的参数有:
收件人
发件人
消息主体 msg 是一个字符串,表示邮件
案例
from email.mime.text import MIMEText # 导入邮件主体内容的类
from email.header import Header # 导入邮件头部信息的类
import smtplib # 导入发送邮件的模块
msg = MIMEText('python 本地邮件测试\n', 'plain', 'utf8')
# 定义文本的内容,'plain' 表示纯文本,文本类型为'utf8保证兼容性
标准邮件需要三个头部信息 From To Subject
#发送者信息
msg['From'] = Header('发送者', 'utf8')
#接收者信息
msg['To'] = Header('接收者们', 'utf8')
#主题信息
msg['Subject'] = Header('py test', 'utf8')
#用127.0.0.1发邮件创建一个对象smtp
smtp = smtplib.SMTP('127.0.0.1')
sender = 'root' # 发送方
receivers = ['bob', 'alice'] # 接收方,发送邮件给多个用户,用列表表示
# msg.as_bytes() 指定以字节的方式发送邮件,sendmail方法
smtp.sendmail(sender, receivers, msg.as_bytes())
#SMTP是发送邮件的协议,Python内置对SMTP的支持,可以发送纯文本邮件、HTML邮件以及带附件的邮件。
#Python对SMTP支持有smtplib和email两个模块,email负责构造邮件,smtplib负责发送邮件。
#Python SMTP 对象使用 sendmail 方法发送邮件
paramiko 模块应用 功能
实现对 SSH 的相关功能,例如:要对服务器进行远程管理的操作,就需要使用此模块
[root@localhost xxx]# pip3 install paramiko # 使用pip,安装paramiko模块
基本使用
常用方法解释说明
**SSHClient:**创建用于连接 ssh 服务器的实例
**paramiko.AutoAddPolicy:**设置自动添加主机密钥
**ssh.connect:**连接ssh服务器
**ssh.exec_command:**在ssh 服务器上执行指定命令
案例:实现ssh远程连接服务器执行命令
import paramiko#这个模块导入不进去,可能是解释器版本、位置的问题
def rcmd(host, username, password, commands):
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(
paramiko.AutoAddPolicy())
ssh.connect(host,
username=username, password=password)
data = ssh.exec_command(commands)
# data[1]: 存储的是命令执行成功的输出信息
# data[2]: 存储的是命令执行失败的错误信息
log = data[1].read()
err = data[2].read()
if len(log) != 0:
print("log:", log.decode(), end="")
if len(err) != 0:
print("err:", err.decode(), end="")
ssh.close()
if __name__ == '__main__':
ip = input("请输入您要操作的远程主机ip: ")
username = input(f"请输入ip为:{ip}, 登录的用户名: ")
password = input(f"请输入 {username} 对应的密码: ")
cmds = input("请输入要执行的命令: ")
rcmd(ip, username, password, cmds)
PyMySQL 模块应用
连接数据库
创建连接是访问数据库的第一步
import pymysql
conn = pymysql.connect(
host='127.0.0.1', #指定主机
port=3306,
user='root',
db='tedu1',#库名
charset='utf8'#字符集
)
游标
游标(cursor)就是游动的标识
通俗的说,一条sql取出对应n条结果资源的接口/句柄,就是游标,沿着游标可以一次取出一行
cur = conn.cursor() # 创建游标【对数据库进行增删改查】
1.yum安装mariadb-server gcc并启动进入
2.create database xxxx 创建数据库xxxx
3. pip3 install pymysql
import pymysql
#1.建立连接
conn = pymysql.connect(
host='127.0.0.1',
port=3306,
user='root',
db='xxxx',
charset='utf8'
)
# 2.创建游标
cur = conn.cursor() #【对数据库进行增删改查】
#数据库的操作创建表
create_table = '''CREATE TABLE departments(
u_id INT, u_name VARCHAR(50)
)'''
cur.execute(create_table) # 执行sql语句create_table插入数据
#插入数据
insert_table = 'INSERT INTO departments VALUES (%s, %s)' # 定义插入数据的变量,%s为占位符
cur.execute(insert_table, (1, '人事部')) # 执行sql语句insert_table, 插入一条记录
cur.executemany( # executemany(), 执行sql语句insert_table, 同时插入多条记录
insert_table,
[(2, '运维部'), (3, '开发部'), (4, '测试部'), (5, '财务部'), (6, '市场部')]
)
#查询数据
sql_q = "SELECT * FROM departments"
cur.execute(sql_q)
result = cur.fetchone()#返回单条数据
print(result)
result2 = cur.fetchmany(2)#接着返回指定行数据
print(result2)
result3 = cur.fetchall()#接着返回剩余数据
print(result3)
#修改数据
# 更新部门表【departments】中的数据
update_table = 'UPDATE departments SET dep_name=%s WHERE dep_name=%s'
cur.execute(update_dep, ('人力资源部', '人事部'))
conn.commit()
删除记录
#删除部门表【departments】中的id为6的数据
del_dep = 'DELETE FROM departments WHERE dep_id=%s'
cur.execute(del_dep, (6,))
conn.commit()#对数据库表做修改操作,必须要 commit
cur.close()#关闭游标
db.close()#关闭数据库连接
import pymysql
#1.建立连接
conn=pymysql.connect(host="127.0.0.1",port=3306,user="root",db="tedu1",charset='utf8'
)
cur=conn.cursor()#2.创建游标 数据库的操作接口
#3.数据库操作
# create_bm="""create table bm(
# bm_id int,bm_name varchar(50)
# );
# """
#
#插入数据
# insert_bm="insert into bm values(%s,%s);"
# cur.execute(insert_bm,(1,"你好"))
# cur.executemany(insert_bm,[(2,"开发部"),(3,"运维部"),(4,"市场部"),(5,"sb王鑫部"),(6,"sb")])
# cur.execute(create_bm)
#查询数据
select_bm="select * from bm;"
cur.execute(select_bm)
# print(cur.fetchone())#接着抓单条
# print(cur.fetchone())#接着抓一条
# print(cur.fetchmany(2))#接着抓取两条数据
# print(cur.fetchall())#抓取剩余全部
#更新数据
# update_bm="update bm set bm_name=%s where bm_id=%s;"
# cur.execute(update_bm,("test",5))#单条更新
# cur.executemany(update_bm,[("OPS",1),("DEV",2)])
# print(cur.fetchall())#抓取剩余全部
#删除数据
# delete_bm="delete from bm where bm_id=%s;"
# cur.execute(delete_bm,1)#单条删除
# cur.executemany(delete_bm,[4,5,6])#批量删除
print(cur.fetchall())#抓取剩余全部
#4.提交事物以及关闭资源
conn.commit()
cur.close()
conn.close()
真实案例 从文件增加数据到数据库
把文件中的
id name
1 yhl
2 xxx
3 rew
.....添加到数据库中
import pymysql
datas=[]
conn=pymysql.connect(host="127.0.0.1",
port=3306,
user="root",
db="tedu1",
charset='utf8')
cur=conn.cursor()#创建游标
with open("/opt/bm.txt",mode="r") as fr:#打开文件前提是文件
for i in fr.readlines()[1:]:#第一行不要所以从1开始截取数据
lst=i[:-1].split(" ")#把空行(\n)去掉
datas.append((int(lst[0]),lst[1]))#把需要的数据放入新的列表
insert_bm="insert into bm values(%s,%s);"
cur.executemany(insert_bm,datas)
conn.commit()
cur.close()
conn.close()
再来一个案例
import pymysql
datas=[]
conn=pymysql.connect(host="127.0.0.1",port=3306,user="root",db="tedu1",charset='utf8')
cur=conn.cursor()#创建游标
#创建表
# sql = """CREATE TABLE EMPLOYEE1 (
# id int(6) PRIMARY KEY,
# FIRST_NAME VARCHAR(20) NOT NULL,
# LAST_NAME VARCHAR(20),
# AGE INT,
# SEX VARCHAR(1),
# INCOME FLOAT
# )"""
# cur.execute(sql)
#添加数据
# insert_sql="insert into EMPLOYEE1 values(%s,%s,%s,%s,%s,%s);"
# cur.executemany(insert_sql,[(1,"Mac","A",20,"M",20000),
# (2,"Tom","B",20,"F",30000),
# (3,"Bob","C",20,"M",40000)])
#查询数据
select_sql="select * from EMPLOYEE1;"
cur.execute(select_sql)
print(cur.fetchall())
#更新数据
# update_sql="update EMPLOYEE1 set INCOME=10 where FIRST_NAME='Mac'"
# cur.execute(update_sql)
# print(cur.fetchall())
#删除数据
delete_sql="delete from EMPLOYEE1 where FIRST_NAME='Tom';"
cur.execute(delete_sql)
#关闭资源提交数据
conn.commit()
cur.close()
conn.close()
简单的sql语句
create database 名 创建数据库
show databases 查询有哪些数据库名
create table 名 创建表名、
show tables 查询有哪些表
insert into 表名 values(字段名 约束条件,字段名 约束条件,....例如id int(6),name varchar(50))
select * from 表名 查询有哪些数据
update 表名 set 字段名="新值" where 字段名="xxx"
delete from 表名 where 字段名="值"
drop database 库名
drop table 表名
你需要知道的
1 smtplib和email模块的作用是什么?
smtplib作用是邮件的转发中转
email模块的作用是 生成发送的邮件对象 可以设置email的头部结构以及正文
2 安装pymysql模块的方法有哪些?
pip3 install pymysql
访问http://pypi.python.org,下载pymysql模块后本地通过pip安装
pip3 install PyMySQL-0.8.0.tar.gz
访问http://pypi.python.org,下载pymysql模块后本地安装
tar xzf PyMySQL-0.8.0.tar.gz
cd PyMySQL
python3 setup.py install
3 通过pip在线安装模块,如何提升速度?
vim ~/.pip/pip.conf
[global]
index-url=http://pypi.douban.com/simple/
[install]
4 使用pymysql操作数据库的一般流程是什么?
建立连接
创建游标
数据库操作通过游标
提交操作
关闭游标
关闭数据库连接
5 通过paramiko管理远程服务器的一般流程是什么?
创建SSHClient实例
设置添加主机密钥策略
连接ssh服务器
执行指定命令
在shell命令行中接受用于连接远程服务器的密码以及在远程主机上执行的命令