sqlalchemy操做Mysql

 

 

  SQLAlchemy「採用簡單的Python語言,爲高效和高性能的數據庫訪問設計,實現了完整的企業級持久模型」。SQLAlchemy的理念是,SQL數據庫的量級和性能重要於對象集合;而對象集合的抽象又重要於表和行。所以,SQLAlchmey採用了相似於Java裏Hibernate的數據映射模型,而不是其餘ORM框架採用的Active Record模型。不過,Elixir和declarative等可選插件能夠讓用戶使用聲明語法。python

 

 

安裝mysql

pip3 install SQLAlchemyweb

pip3 install pymysql  #須要pymysql或者MySQLdb的支持sql

 

鏈接數據庫數據庫

mysql+pymysql://<username>:<password>@<host>/<dbname>[?<options>]

 

下面咱們看一個例子:session

#導入想關模塊from sqlalchemy import create_engine  
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import Column, Integer, String, ForeignKey, UniqueConstraint, Index
from sqlalchemy.orm import sessionmaker, relationship

engine = create_engine("mysql+pymysql://root:123456@192.168.11.12:3306/haha", encoding='utf-8', max_overflow=5)

# DBSession = sessionmaker(bind=engine)
#實例化
Base = declarative_base()


# 主機表
class Host(Base):        #聲明類
    __tablename__ = 'host'  #須要建立的表名
    nid = Column(Integer, primary_key=True, autoincrement=True)  #定義主鍵,自增1 ,其實這裏還能夠有其餘參數
    hostname = Column(String(32))
    ip = Column(String(32), unique=True)
    port = Column(String(32))
    host_user = relationship('HostUser',secondary=lambda: HostToHostUser.__table__,backref='h')#映射表的外鍵


# 主機用戶表
class HostUser(Base):
    __tablename__ = 'host_user'
    nid = Column(Integer, primary_key=True, autoincrement=True)
    username = Column(String(32))
    passwd = Column(String(32))


# 主機用戶與主機關係表
class HostToHostUser(Base):
    __tablename__ = 'host_to_hostuser'
    nid = Column(Integer, primary_key=True, autoincrement=True)
    user_nid = Column(Integer, ForeignKey('host_user.nid'))
    host_nid = Column(Integer, ForeignKey('host.nid'))
    host = relationship('Host', backref='h')
    host_user = relationship('HostUser', backref='u')


# 審計表
class AuditLog(Base):
    __tablename__ = 'audit_log'
    nid = Column(Integer, primary_key=True)
    user_nid = Column(Integer, ForeignKey('host_user.nid'))
    host_nid = Column(Integer, ForeignKey('host.nid'))
    cmd = Column(String(255))
    date = Column(String(255))


def init_db():
    Base.metadata.create_all(engine)


def drop_db():
    Base.metadata.drop_all(engine)


init_db()

Session = sessionmaker(bind=engine)
session = Session()
#
#


session.add_all((
    Host(hostname='web1', ip='192.168.11.12', port='22', ),
    Host(hostname='web2', ip='192.168.11.23', port='22', ),
    Host(hostname='web3', ip='192.168.11.34', port='22', ),
    Host(hostname='web4', ip='192.168.11.45', port='22', ),
    Host(hostname='web5', ip='192.168.11.228', port='22', ),
))
session.commit()

session.add_all([
    HostUser(username='madking', passwd='123', ),
    HostUser(username='oldboy', passwd='123', ),
])
session.commit()

session.add_all((
    HostToHostUser(user_nid='1', host_nid='1', ),
    HostToHostUser(user_nid='1', host_nid='2', ),
    HostToHostUser(user_nid='1', host_nid='5', ),
    HostToHostUser(user_nid='2', host_nid='1', ),
))
session.commit()
相關文章
相關標籤/搜索