python3 sqlAlchemy

python3 sqlAlchemy

其实Python3 可以搞它!----------------》》> python3 sqlAlchemy -----------它是ORM技术!ORM技术:Object-Relational Mapping,把关系数据库的表结构映射到对象上。是不是很简单? 

SQLAlchemy是Python编程语言下的一款ORM框架,该框架建立在数据库API之上,使用关系对象映射进行数据库操作,简言之便是:将对象转换成SQL,然后使用数据API执行SQL并获取执行结果。

 

 Python3为什么要借助sqlAlchemy 来搞MySQL呢。----------因为不用写sql语句,不用重写sql语句。!

    这个玩意就是把sql语句封装成了类,我们直接调用对象。不正是python3 之道吗?

 通过sqlalchemy 搞一搞原生的sql语句!

 1 #!/usr/bin/env python3
 2 # -*- coding:utf-8 -*-
 3 # Author:liushubao
 4 from sqlalchemy import create_engine    # 导入创建引擎模块
 5 engine = create_engine("mysql+mysql://root:@127.0.0.1:3306/s12_testdb",max_overflow=5) # 创建一个引擎
 6 
 7 ## 引擎操作原生的sql语句::::
 8 
 9 engine.execute(
10     "INSERT INTO ts_test (a, b) VALUES ('2', 'v1')"
11 )
12 
13 engine.execute(
14      "INSERT INTO ts_test (a, b) VALUES (%s, %s)",
15     ((555, "v1"),(666, "v1"),)
16 )
17 engine.execute(
18     "INSERT INTO ts_test (a, b) VALUES (%(id)s, %(name)s)",
19     id=999, name="v1"
20 )
21 
22 result = engine.execute('select * from ts_test')
23 result.fetchall()
24 
25 简单实用sqlalchemy
简单的sqlalchemy

单个表-增删改查!

 1 #!/usr/bin/env python3
 2 # -*- coding:utf-8 -*-
 3 # Author:liushubao
 4 from sqlalchemy.ext.declarative import declarative_base  # 导入可以创建的基类的模块
 5 from sqlalchemy import Column, Integer, String
 6 from sqlalchemy import create_engine                    # 从sqlalchemy 导入创建引擎这个模块
 7 from sqlalchemy.orm import sessionmaker,session
 8 Base = declarative_base()                   # 创建一个ORM基类 ,这是个固定写法,因为下面要用类对数据库操作,要继承这个类。
 9 
10 engine = create_engine("mysql+pymysql://root:123@127.0.0.1:3306/liushubao", max_overflow=5,echo=False) #echo是显示创建过程!
11 #创建一个引擎,        用MySQL      用户名:密码@主机名:端口号/那个数据库,最大连接数!
12 
13 # 创建单表
14 class Users(Base):      #继承刚刚那个基类必须!
15     __tablename__ = 'users' #  开始了,这个是要创建的表单名字
16     id = Column(Integer, primary_key=True,autoincrement=True) #列的属性
17     name = Column(String(32),unique=True,nullable=False)     #列的属性
18     extra = Column(String(16),unique=True,nullable=False)    #列的属性
19 
20 #------------------上面表示影射成功,但不代表创建,-----------------
21 Base.metadata.create_all(engine)  #创建表所有结构!!
22 #--------------------增加数据------------------------
23 if __name__ =='__main__':
24     SessionCls = sessionmaker(bind=engine)  #创建与数据库连接的session!它返回的是一个类名!
25     h1 = Users(name='liushubao',extra = 'hello world')      #给表里插入数据!!
26     h2 = Users(name='shubao', extra='welcome to hello world!')  # 给表里插入数据!!
27     session.add(h1) # 单个添加
28     session.add_all([h1,h2])  #批量添加
29     session.commit()  # 添加生效!
30 #########################查询修改##############################################
31 if __name__ =='__main__':
32     SessionCls = sessionmaker(bind=engine)  #创建与数据库连接的session!它返回的是一个类名!
33     obj = session.query(Users).filter(Users.name = 'liushubao').first() #查询后返回的是一个对象
34     obj.name = 'LIUSHUBAO'
35     session.commit()  # 添加生效!
36 #########################    删除    ##############################################
37 if __name__ =='__main__':
38     SessionCls = sessionmaker(bind=engine)  #创建与数据库连接的session!它返回的是一个类名!
39     obj = session.query(Users).filter(Users.name = 'LIUSHUBAO').first() #返回的是一个对象
40     session.delete(obj)  # 删除
41     session.commit()  # 添加生效!
42 
43 sqlalchemy
View Code

多表、联表!

 1 # Author:Alex Li
 2 from sqlalchemy.ext.declarative import declarative_base
 3 from sqlalchemy import Column, Integer, String, ForeignKey, UniqueConstraint, Index
 4 from sqlalchemy.orm import sessionmaker, relationship
 5 from sqlalchemy import create_engine
 6 
 7 engine = create_engine("mysql+pymysql://root:123@127.0.0.1:3306/s13", max_overflow=5)
 8 
 9 Base = declarative_base()
10 
11 # 创建单表
12 class Users(Base):
13     __tablename__ = 'users'
14     id = Column(Integer, primary_key=True)
15     name = Column(String(32))
16     extra = Column(String(16))
17 
18     __table_args__ = (
19     UniqueConstraint('id', 'name', name='uix_id_name'),
20         Index('ix_id_name', 'name', 'extra'),
21     )
22 
23 # 一对多
24 class Favor(Base):
25     __tablename__ = 'favor'
26     nid = Column(Integer, primary_key=True)
27     caption = Column(String(50), default='red', unique=True)
28 
29 
30 class Person(Base):
31     __tablename__ = 'person'
32     nid = Column(Integer, primary_key=True)
33     name = Column(String(32), index=True, nullable=True)
34     favor_id = Column(Integer, ForeignKey("favor.nid"))
35 
36 # 多对多
37 class ServerToGroup(Base):
38     __tablename__ = 'servertogroup'
39     nid = Column(Integer, primary_key=True, autoincrement=True)
40     server_id = Column(Integer, ForeignKey('server.id'))
41     group_id = Column(Integer, ForeignKey('group.id'))
42 
43 class Group(Base):
44     __tablename__ = 'group'
45     id = Column(Integer, primary_key=True)
46     name = Column(String(64), unique=True, nullable=False)
47 
48 
49 class Server(Base):
50     __tablename__ = 'server'
51 
52     id = Column(Integer, primary_key=True, autoincrement=True)
53     hostname = Column(String(64), unique=True, nullable=False)
54     port = Column(Integer, default=22)
55 
56 # Base.metadata.create_all(engine)
57 # Base.metadata.drop_all(engine)
58 
59 Session = sessionmaker(bind=engine)
60 session = Session()
61 
62 # obj = Users(name='alex111',extra='sss')
63 # session.add(obj)
64 # session.commit()
65 q = session.query(Users)
66 print(q)
67 ret = session.query(Users).all()
68 print(ret[0].name)
69 print(ret[0].id)
70 #
71 # session.commit()
72 # session.add_all()
View Code

 

paramiko

paramiko就是:Python SSH module。

一般使用paramiko的功能就是通过ssh远程执行命令,远程传输文件等等。

 1 #!/usr/bin/python
 2 
 3 import paramiko
 4 
 5  
 6 
 7 t = paramiko.Transport(("某IP地址",22))
 8 
 9 t.connect(username = "用户名", password = "口令")
10 
11 sftp = paramiko.SFTPClient.from_transport(t)
12 
13 remotepath='/tmp/test.txt'
14 
15 localpath='/tmp/test.txt'
16 
17 sftp.get(remotepath, localpath)
18 
19 t.close()

 

paramiko实现上传下载文件

class SSHConnection(object):

    def __init__(self, host='192.168.11.61', port=22, username='alex',pwd='alex3714'):
        self.host = host
        self.port = port
        self.username = username
        self.pwd = pwd
        self.__k = None

    def run(self):
        self.connect()
        pass
        self.close()

    def connect(self):
        transport = paramiko.Transport((self.host,self.port))
        transport.connect(username=self.username,password=self.pwd)
        self.__transport = transport

    def close(self):
        self.__transport.close()

    def cmd(self, command):
        ssh = paramiko.SSHClient()
        ssh._transport = self.__transport
        # 执行命令
        stdin, stdout, stderr = ssh.exec_command(command)
        # 获取命令结果
        result = stdout.read()
        return result

    def upload(self,local_path, target_path):
        # 连接,上传
        sftp = paramiko.SFTPClient.from_transport(self.__transport)
        # 将location.py 上传至服务器 /tmp/test.py
        sftp.put(local_path, target_path)

ssh = SSHConnection()
ssh.connect()
r1 = ssh.cmd('df')
ssh.upload('s2.py', "/home/alex/s7.py")
ssh.close()

paramike上传文件

 

#!/usr/bin/python

import paramiko

 

t = paramiko.Transport(("某IP地址",22))

t.connect(username = "用户名", password = "口令")

sftp = paramiko.SFTPClient.from_transport(t)

remotepath='/tmp/test.txt'

localpath='/tmp/test.txt'

sftp.get(remotepath, localpath)

t.close()

paramiko现实下载文件

 

执行远程命令时有TAB补全功能:

 1 import paramiko
 2 import sys
 3 import os
 4 import socket
 5 import select
 6 import getpass
 7 import termios
 8 import tty
 9 from paramiko.py3compat import u
10 
11 tran = paramiko.Transport(('10.211.55.4', 22,))
12 tran.start_client()
13 tran.auth_password('wupeiqi', '123')
14 
15 # 打开一个通道
16 chan = tran.open_session()
17 # 获取一个终端
18 chan.get_pty()
19 # 激活器
20 chan.invoke_shell()
21 
22 
23 # 获取原tty属性
24 oldtty = termios.tcgetattr(sys.stdin)
25 try:
26     # 为tty设置新属性
27     # 默认当前tty设备属性:
28     #   输入一行回车,执行
29     #   CTRL+C 进程退出,遇到特殊字符,特殊处理。
30 
31     # 这是为原始模式,不认识所有特殊符号
32     # 放置特殊字符应用在当前终端,如此设置,将所有的用户输入均发送到远程服务器
33     tty.setraw(sys.stdin.fileno())
34     chan.settimeout(0.0)
35 
36     while True:
37         # 监视 用户输入 和 远程服务器返回数据(socket)
38         # 阻塞,直到句柄可读
39         r, w, e = select.select([chan, sys.stdin], [], [], 1)
40         if chan in r:
41             try:
42                 x = u(chan.recv(1024))
43                 if len(x) == 0:
44                     print('\r\n*** EOF\r\n')
45                     break
46                 sys.stdout.write(x)
47                 sys.stdout.flush()
48             except socket.timeout:
49                 pass
50         if sys.stdin in r:
51             x = sys.stdin.read(1)
52             if len(x) == 0:
53                 break
54             chan.send(x)
55 
56 finally:
57     # 重新设置终端属性
58     termios.tcsetattr(sys.stdin, termios.TCSADRAIN, oldtty)
59 
60 
61 chan.close()
62 tran.close()
paramiko+tab

 

posted @ 2016-08-02 13:59  eggtea  阅读(201)  评论(0)    收藏  举报