標籤:python sqlalchemy
上一篇簡單的介紹了MySQL的原生命令,以及如何使用pymysql模組在Python裡面使用。這一節簡單的介紹一下sqlAlchemy和他的ORM架構。ORM架構允許開發人員通過類的方法來操作資料庫,而無需在使用原生的SQL語句。
例
from sqlalchemy.ext.declarative import declarative_basefrom sqlalchemy import Column, Integer, String, ForeignKey, UniqueConstraint, Indexfrom sqlalchemy.orm import sessionmaker, relationshipfrom sqlalchemy import create_engineengine = create_engine("mysql+pymysql://yli:[email protected]:3306/mydb", max_overflow=5)Base = declarative_base()# 建立單表class Users(Base): __tablename__ = ‘users‘ id = Column(Integer, primary_key=True) name = Column(String(32)) extra = Column(String(16)) __table_args__ = ( UniqueConstraint(‘id‘, ‘name‘, name=‘uix_id_name‘), Index(‘ix_id_name‘, ‘name‘, ‘extra‘), )# 一對多class Favor(Base): __tablename__ = ‘favor‘ nid = Column(Integer, primary_key=True) caption = Column(String(50), default=‘red‘, unique=True)class Person(Base): __tablename__ = ‘person‘ nid = Column(Integer, primary_key=True) name = Column(String(32), index=True, nullable=True) favor_id = Column(Integer, ForeignKey("favor.nid"))# 多對多class ServerToGroup(Base): __tablename__ = ‘servertogroup‘ nid = Column(Integer, primary_key=True, autoincrement=True) server_id = Column(Integer, ForeignKey(‘server.id‘)) group_id = Column(Integer, ForeignKey(‘group.id‘))class Group(Base): __tablename__ = ‘group‘ id = Column(Integer, primary_key=True) name = Column(String(64), unique=True, nullable=False)class Server(Base): __tablename__ = ‘server‘ id = Column(Integer, primary_key=True, autoincrement=True) hostname = Column(String(64), unique=True, nullable=False) port = Column(Integer, default=22)#建立表Base.metadata.create_all(engine) #刪除表# Base.metadata.drop_all(engine)
上述命令建立的表
650) this.width=650;" src="http://s5.51cto.com/wyfs02/M01/8A/0E/wKiom1glFYPjCL_BAABCvMJmtQo427.png" title="你.PNG" alt="wKiom1glFYPjCL_BAABCvMJmtQo427.png" />
修改一下,我們可以添加資料和查詢資料
from sqlalchemy.ext.declarative import declarative_basefrom sqlalchemy import Column, Integer, String, ForeignKey, UniqueConstraint, Indexfrom sqlalchemy.orm import sessionmaker, relationshipfrom sqlalchemy import create_engineengine = create_engine("mysql+pymysql://yli:[email protected]:3306/mydb", max_overflow=5)Base = declarative_base()# 建立單表class Users(Base): __tablename__ = ‘users‘ id = Column(Integer, primary_key=True) name = Column(String(32)) extra = Column(String(16)) __table_args__ = ( UniqueConstraint(‘id‘, ‘name‘, name=‘uix_id_name‘), Index(‘ix_id_name‘, ‘name‘, ‘extra‘), )# 一對多class Favor(Base): __tablename__ = ‘favor‘ nid = Column(Integer, primary_key=True) caption = Column(String(50), default=‘red‘, unique=True)class Person(Base): __tablename__ = ‘person‘ nid = Column(Integer, primary_key=True) name = Column(String(32), index=True, nullable=True) favor_id = Column(Integer, ForeignKey("favor.nid"))# 多對多class ServerToGroup(Base): __tablename__ = ‘servertogroup‘ nid = Column(Integer, primary_key=True, autoincrement=True) server_id = Column(Integer, ForeignKey(‘server.id‘)) group_id = Column(Integer, ForeignKey(‘group.id‘))class Group(Base): __tablename__ = ‘group‘ id = Column(Integer, primary_key=True) name = Column(String(64), unique=True, nullable=False)class Server(Base): __tablename__ = ‘server‘ id = Column(Integer, primary_key=True, autoincrement=True) hostname = Column(String(64), unique=True, nullable=False) port = Column(Integer, default=22)Base.metadata.create_all(engine)# Base.metadata.drop_all(engine)Session = sessionmaker(bind=engine)session = Session()obj = Users(name=‘alex111‘,extra=‘sss‘)session.add(obj)session.commit()q = session.query(Users)print(q)ret = session.query(Users).all()print(ret)print(ret[0].name)print(ret[0].id)
結果如下所示:
"C:\Program Files\Python3\python.exe" "C:/Users/yli/Documents/Tencent Files/38144205/FileRecv/FileRecv/day12/s17.py"SELECT users.id AS users_id, users.name AS users_name, users.extra AS users_extra FROM users[<__main__.Users object at 0x00000259D73AEF28>]alex1111
本文出自 “麻婆豆腐” 部落格,請務必保留此出處http://beanxyz.blog.51cto.com/5570417/1871672
Python 學習筆記 - sqlAlchemy(初稿)