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
单个表-增删改查!
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
多表、联表!
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()
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()

浙公网安备 33010602011771号