python自带模块连接数据库_Python Paramiko模块与MySQL数据库操作

Paramiko模块批量管理:

通过调用ssh协议进行远程机器的批量命令执行.

要使用paramiko模块那就必须先安装这个第三方模块,仅需要在本地上安装相应的软件(python以及PyCrypto),对远程服务器没有配置要求,对于连接多台服务器,进行复杂的连接操作特别有帮助。

一、安装:

1:安装gcc和python-devel

yum install gcc gcc-c++ python-devel #安装所需环境

2:  paramiko依赖pycrypto模块,要先下载pycrypto安装

wget http://ftp.dlitz.net/pub/dlitz/crypto/pycrypto/pycrypto-2.6.tar.gz

解压后进入主目录执行下面命令:

python setup.py build

python setup.py install

3:下载paramiko进行安装

wget http://www.lag.net/paramiko/download/paramiko-1.7.7.1.tar.gz

解压后进入主目录执行下面命令

python setup.py build

python setup.py install

4: 修改配置

在python的命令行模式下面导入模块,进行测试:

import paramiko

结果提示错误如下:

Traceback (most recent call last):

File"", line 1, in File"/usr/lib/python2.6/site-packages/paramiko-1.7.7.1-py2.6.egg/paramiko/__init__.py", line 69, in

from transport importSecurityOptions, Transport

File"/usr/lib/python2.6/site-packages/paramiko-1.7.7.1-py2.6.egg/paramiko/transport.py", line 32, in

from paramiko importutil

File"/usr/lib/python2.6/site-packages/paramiko-1.7.7.1-py2.6.egg/paramiko/util.py", line 32, in

from paramiko.common import *File"/usr/lib/python2.6/site-packages/paramiko-1.7.7.1-py2.6.egg/paramiko/common.py", line 98, in

from Crypto importRandom

File"/usr/lib64/python2.6/site-packages/Crypto/Random/__init__.py", line 29, in

from Crypto.Random import_UserFriendlyRNG

File"/usr/lib64/python2.6/site-packages/Crypto/Random/_UserFriendlyRNG.py", line 38, in

from Crypto.Random.Fortuna importFortunaAccumulator

File"/usr/lib64/python2.6/site-packages/Crypto/Random/Fortuna/FortunaAccumulator.py", line 39, in

importFortunaGenerator

File"/usr/lib64/python2.6/site-packages/Crypto/Random/Fortuna/FortunaGenerator.py", line 34, in

from Crypto.Util.number importceil_shift, exact_log2, exact_div

File"/usr/lib64/python2.6/site-packages/Crypto/Util/number.py", line 56, in

if _fastmath is not None and not_fastmath.HAVE_DECL_MPZ_POWM_SEC:

AttributeError:'module' object has no attribute 'HAVE_DECL_MPZ_POWM_SEC'

解决方法:

进入/usr/lib64/python2.6/site-packages/Crypto/Util/number.py ,注解下面两行

#if _fastmath is not None and not _fastmath.HAVE_DECL_MPZ_POWM_SEC:#_warn("Not using mpz_powm_sec. You should rebuild using libgmp >= 5 to avoid timing attack vulnerability.", PowmInsecureWarning)

二、paramiko模块:

SSHClient

用于连接远程服务器并执行基本命令

基于用户名密码连接:

#!/usr/bin/env python

# encoding: utf-8

import paramiko

#记录日志

paramiko.util.log_to_file('paramiko.log')

#创建SSH对象

ssh = paramiko.SSHClient()

# 允许连接不在know_hosts文件中的主机

ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())

# 连接远程主机

ssh.connect(hostname='10.10.100.100',port=22,username='root',password='******')

#执行命令(输入,输出,错误返回结果)

stdin,stdout,stderr=ssh.exec_command('free -m')

#读取stdout命令结果

result = stdout.read()

#输出并打印出结果.

print result

# 关闭连接

SSHClient 封装 Transport:

importparamiko

paramiko.util.log_to_file('paramilo.log')

transport= paramiko.Transport(('10.10.100.110', 22))

transport.connect(username='www', password='***')

ssh=paramiko.SSHClient()

ssh._transport=transport

stdin, stdout, stderr= ssh.exec_command('df -Th')printstdout.read()

transport.close()

SSHClient 封装 Transport

三、使用Key连接远程:

本机生成key :ssh-keygen

#!/usr/bin/env python#encoding: utf-8

importparamiko

private_key= paramiko.RSAKey.from_private_key_file('/home/www/.ssh/id_rsa')  #本机私钥文件#创建SSH对象

ssh =paramiko.SSHClient()#允许连接不在know_hosts文件中的主机

ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())#连接服务器

ssh.connect(hostname='ip', port=22, username='www', pkey=private_key)#执行命令

stdin, stdout, stderr = ssh.exec_command('df')#获取命令结果

result =stdout.read()#关闭连接

ssh.close()

importparamiko

private_key= paramiko.RSAKey.from_private_key_file('/home/www/.ssh/id_rsa')

transport= paramiko.Transport(('hostname', 22))

transport.connect(username='www', pkey=private_key)

ssh=paramiko.SSHClient()

ssh._transport=transport

stdin, stdout, stderr= ssh.exec_command('df')

transport.close()

SSHClient 封装 Transport

SFTPClient

用于连接远程服务器并执行上传下载

基于用户名密码上传下载:

1 importparamiko2

3 transport = paramiko.Transport(('hostname',22))4 transport.connect(username='www',password='****')5 sftp =paramiko.SFTPClient.from_transport(transport)6 #将location.py 上传至服务器 /tmp/test.py

7 sftp.put('/tmp/parmiko1.py', '/tmp/test.py')8 #将remove_path 下载到本地 local_path

9 sftp.get('remove_path', 'local_path')10

11 transport.close()

基于公钥密钥上传下载:

1 importparamiko2

3 private_key = paramiko.RSAKey.from_private_key_file('/home/www/.ssh/id_rsa')4 transport = paramiko.Transport(('hostname', 22))5 transport.connect(username='www', pkey=private_key )6 sftp =paramiko.SFTPClient.from_transport(transport)7 #将location.py 上传至服务器 /tmp/test.py

8 sftp.put('/tmp/paramiko1.py', '/tmp/test.py')9 #将remove_path 下载到本地 local_path

10 sftp.get('remove_path', 'local_path')11 transport.close

Python paramiko模块使用实例:

#!/usr/bin/env python#coding:utf-8

importparamikoprint """iplist.txt

10.10.100.127 user1 user1@123

10.10.100.128 user1 user1@123

10.10.100.129 user1 user1@123

10.10.100.130 user1 user1@123"""

defparam_login():#paramiko.util.log_to_file('paramiko.log')

#s = paramiko.SSHClient()

#s.set_missing_host_key_policy(paramiko.AutoAddPolicy())

#try:

#s.connect(hostname=ip,port=22,username=username,password=passwd)

#stdin, stdout, stderr = s.exec_command('free -m')

#print u"ip地址是%s的执行结果为:" %(ip),"\n",stdout.read()

#except:

#return "None"

#s.close()

#SSHClient 封装 Transport:

paramiko.util.log_to_file('paramilo.log')try:

transport= paramiko.Transport((ip, 22))

transport.connect(username=username, password=passwd)

ssh=paramiko.SSHClient()

ssh._transport=transport

stdin, stdout, stderr= ssh.exec_command('df -Th')print u"\033[32;1mip地址是%s的执行结果为:\033[0m" %(ip),"\n",stdout.read()except:return "None"transport.close()#用于连接远程服务器并执行上传下载

defsshftp():

transport= paramiko.Transport((ip,22))

transport.connect(username=username,password=passwd)

sftp=paramiko.SFTPClient.from_transport(transport)#将本地/tmp/目录下文件上传至服务器/tmp目录下并改名

sftp.put('/tmp/1.txt', '/tmp/2.txt')#将remove_path 下载到本地 local_path

#sftp.get('remove_path', 'local_path')

sftp.get('/tmp/2.txt','/tmp/2.txt')

transport.close()if __name__ == "__main__":

with open('iplist.txt','r') as userlist:for i in userlist.readlines(): #循环读取文件

m = i.strip() #去除空行

#print m

ip,username,passwd =m.split()

param_login()

sshftp()

登录机器并执行命令

#!/usr/bin/env python#coding:utf-8

importsysimporttimeimportparamikoclassparamiko_ssh(object):def __init__(self,hostname,username,passwd):

self.Hostname=hostname

self.port= 22self.Username=username

self.Passwd=passwddefssh_login(self):#SSHClient 封装 Transport:

paramiko.util.log_to_file('paramilo.log')try:

transport= paramiko.Transport((self.Hostname, 22))

transport.connect(username=self.Username, password=self.Passwd)

ssh=paramiko.SSHClient()

ssh._transport=transport

stdin, stdout, stderr= ssh.exec_command('df -Th')print u"\033[32;1mip地址是%s的执行结果为:\033[0m" %(self.Hostname),"\n",stdout.read()except:return "None"time.sleep(3)

sys.exit()

transport.close()#用于连接远程服务器并执行上传下载

defsshftp(self):

transport= paramiko.Transport((self.Hostname,22))

transport.connect(username=self.Username,password=self.Passwd)

sftp=paramiko.SFTPClient.from_transport(transport)#将本地/tmp/目录下文件上传至服务器/tmp目录下并改名

sftp.put('/tmp/1.txt', '/tmp/2.txt')#将remove_path 下载到本地 local_path

#sftp.get('remove_path', 'local_path')

sftp.get('/tmp/2.txt','/tmp/2.txt')

transport.close()if __name__ == "__main__":

with open('iplist.txt','r') as userlist:for i in userlist.readlines(): #循环读取文件

m = i.strip() #去除空行

#print m

hostname,username,passwd =m.split()

p=paramiko_ssh(hostname,username,passwd)

p.ssh_login()

p.sshftp()

通过类执行登录操作

Python的paramiko模块块基于SSH用于连接远程服务器并执行相关操作. 堡垒机就是基于盖模块而开发的.

实现思路:

堡垒机执行流程:

管理员为用户在服务器上创建账号(将公钥放置服务器,或者使用用户名密码)

用户登陆堡垒机,输入堡垒机用户名密码,现实当前用户管理的服务器列表

用户选择服务器,并自动登陆

执行操作并同时将用户操作记录

注:配置.brashrc实现ssh登陆后自动执行脚本,如:/usr/bin/python /home/www/menu.py

未完代写.........................

Python 操作 Mysql 模块的安装:

1 linux:2 yum install MySQL-python3

4 window:5 http://files.cnblogs.com/files/wupeiqi/py-mysql-win.zip

SQL基本使用

1、数据库操作

1 show databases;2 use [databasename];3 create database [name];

2、数据表操作

1 show tables;2

3 create table students4 (5 id int not null auto_increment primary key, #自动增长,主键

6 name char(8) notnull,7 sex char(4) notnull,8 age tinyint unsigned notnull,9 tel char(13) null default "-"

10 );

CREATE TABLE `wb_blog` (

`id` smallint(8) unsigned NOT NULL,

`catid` smallint(5) unsigned NOT NULL DEFAULT '0',

`title` varchar(80) NOT NULL DEFAULT '',

`content` text NOT NULL,

PRIMARY KEY (`id`),

UNIQUE KEY `catename` (`catid`)

) ;

View Code

3、数据操作:

1 insert into students(name,sex,age,tel) values('www','man',18,'151515151')2

3 delete from students where id =2;4

5 update students set name = 'toom' where id =1;6

7 select * from students

4、其他

主键     主键是表里面唯一识别记录的字段,一般是id

外键     外键是该表与另一个表之间联接的字段 ,必须为另一个表中的主键 用途是确保数据的完整性

左右连接    分左连接,右连接,内连接

Python MySQL API

一、插入数据

importMySQLdb#打开数据库连接

conn = MySQLdb.connect(host='127.0.0.1',user='root',passwd='1234',db='mydb')#使用cursor()方法获取操作游标

cur =conn.cursor()#使用execute方法执行SQL语句#reCount = cur.execute("create table UserInfo(id int,name varchar(20),nat varchar(30))") 创建表.

reCount = cur.execute('insert into UserInfo(Name,Address) values(%s,%s)',('toom','usa'))#提交sql语句

conn.commit()#关闭数据库连接

cur.close()

conn.close()print reCount

#execute(self, query, args)

#执行单条sql语句,接收的参数为sql语句本身和使用的参数列表,返回值为受影响的行数

executemany(self, query, args)

#执行单挑sql语句,但是重复执行参数列表里的参数,返回值为受影响的行数,可以一次插入多条值

importMySQLdb

conn= MySQLdb.connect(host='127.0.0.1',user='root',passwd='1234',db='mydb')

cur=conn.cursor()

li=[

('www','usa'),

('toom','jpan'),

]

reCount= cur.executemany('insert into UserInfo(Name,Address) values(%s,%s)',li)

conn.commit()

cur.close()

conn.close()print reCount

批量插入数据

注意:cur.lastrowid

二、删除数据:

importMySQLdb

conn= MySQLdb.connect(host='127.0.0.1',user='root',passwd='1234',db='mydb')

cur=conn.cursor()

reCount= cur.execute('delete from UserInfo where id=1')

conn.commit() #提交数据

cur.close()   #关闭游标

conn.close()  #关闭数据库连接print reCount

三、修改数据

importMySQLdb

conn= MySQLdb.connect(host='127.0.0.1',user='root',passwd='1234',db='mydb')

cur=conn.cursor()

reCount= cur.execute('update UserInfo set Name = %s',('alin',))

#reCount = cur.execute('update UserInfo set sex="man" where Name="alin"') 将Name名是alin的用户的sex改成“man”,set部分将改变.

conn.commit()

cur.close()

conn.close()print reCount

四、查数据

############################### fetchone/fetchmany(num) ##############################

importMySQLdb

conn= MySQLdb.connect(host='127.0.0.1',user='root',passwd='1234',db='mydb')

cur=conn.cursor()

reCount= cur.execute('select * from UserInfo')printcur.fetchone()printcur.fetchone()

cur.scroll(-1,mode='relative')printcur.fetchone()printcur.fetchone()

cur.scroll(0,mode='absolute')printcur.fetchone()printcur.fetchone()

cur.close()

conn.close()printreCount############################### fetchall ##############################

importMySQLdb

conn= MySQLdb.connect(host='127.0.0.1',user='root',passwd='1234',db='mydb')#cur = conn.cursor(cursorclass = MySQLdb.cursors.DictCursor)

cur =conn.cursor()

reCount= cur.execute('select Name,Address from UserInfo')

nRet=cur.fetchall()

cur.close()

conn.close()printreCountprintnRetfor i innRet:print i[0],i[1]############################### fetchmany ##############################

importMySQLdb

conn= MySQLdb.connect(host='127.0.0.1',user='root',passwd='1234',db='mydb')#cur = conn.cursor(cursorclass = MySQLdb.cursors.DictCursor)

cur =conn.cursor()

reCount= cur.execute('select Name,Address from UserInfo')#读出表中的所有数据

info =cur.fetchmany(reCount)for ii ininfo:printii

cur.close()

conn.commit()

conn.close()

cursor方法执行与返回值

cursor方法提供两类操作:1.执行命令,2.接收返回值 。

cursor用来执行命令的方法:

#cursor用来执行命令的方法:

callproc(self, procname, args) //用来执行存储过程,接收的参数为存储过程名和参数列表,返回值为受影响的行数

execute(self, query, args)//执行单条sql语句,接收的参数为sql语句本身和使用的参数列表,返回值为受影响的行数

executemany(self, query, args)//执行单挑sql语句,但是重复执行参数列表里的参数,返回值为受影响的行数

nextset(self)//移动到下一个结果集

#cursor用来接收返回值的方法:

fetchall(self)//接收全部的返回结果行.

fetchmany(self, size=None) //接收size条返回结果行.如果size的值大于返回的结果行的数量,则会返回cursor.arraysize条数据

fetchone(self)//返回一条结果行

scroll(self, value, mode='relative') //移动指针到某一行.如果mode='relative',则表示从当前所在行移动value条,如果mode='absolute',则表示从结果集的第一行移动value条

rowcount//这是一个只读属性,并返回执行execute()方法后影响的行数

另附MySQL安装:

yum库安装MySQL

系统CenOS6.4

1.查看CentOS自带mysql是否已安装

yum list installed | grep mysql

2.若有自带安装的mysql,如何卸载CentOS系统自带mysql数据库?

yum -y remove mysql-*

3.查看yum库上的mysql版本信息(CentOS系统需要正常连接网络)。

yum list | grep mysql 或 yum -y list mysql*

4.使用yum安装mysql数据库。

yum -y install mysql-server mysql mysql-devel

注:安装mysql只是安装了数据库,只有安装mysql-server才相当于安装了客户端。

5.查看刚安装mysql数据库版本信息。

rpm -qi mysql-server

至此,MySQL安装完成!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值