在使用 django 操做數據庫時。會使用django提供的ORM,在使用其餘框架時。沒有自帶的ORM,這個時候就出現了一個替代品 -- SQLAlchemymysql
SQLAlchemy是 Python 編程語言下的一款開源軟件。提供了SQL工具包及對象關係映射(ORM)工具sql
SQLAlchemy「採用簡單的Python語言,爲高效和高性能的數據庫訪問設計,實現了完整的企業級持久模型」。SQLAlchemy的理念是,SQL數據庫的量級和性能重要於對象集合;而對象集合的抽象又重要於表和行。所以,SQLAlchemy採用了相似於Java裏Hibernate的數據映射模型,而不是其餘ORM框架採用的Active Record模型。不過,Elixir和declarative等可選插件能夠讓用戶使用聲明語法。數據庫
SQLAlchemy 的一個目標是提供能兼容衆多數據庫(如 SQLite、MySQL、Postgres、Oracle、MS-SQL、SQLServer 和 Firebird)的企業級持久性模型django
# 導入模塊 from sqlalchemy.ext.declarative import declarative_base from sqlalchemy.engine import create_engine from sqlalchemy import Column from sqlalchemy import String from sqlalchemy import Integer # 實例化,創建基礎類 -- 關係映射類 model = declarative_base() # 建立引擎。用於指定庫 engine = create_engine('mysql+pymysql://root:123@127.0.0.1:3306/test?charset=utf8') class Users(model): ''' Users : 類名,對象 user : 真實的表名 Column : 列 數據庫中的字段所在位置 Integer :當前字段的數據類型,看寫參數控制長度 String :當前字段的數據類型,可寫參數控制長度 ''' __tablename__ = 'user' id = Column(Integer,primary_key=True,autoincrement=True) name = Column(String(32),nullable=False) # 檢索全部繼承model的對象,並在engine指向的庫中建立表 model.metadata.create_all(engine) 須要注意的時。在建立表的時候。須要把字段寫入。不寫字段會報錯
from sqlalchemy.orm import sessionmaker from create_table import engine,Users # 新建查詢窗口 session = sessionmaker(engine) # 打開查詢窗口 db_session = session() info = Users(name='略略略') # 新建SQL語句 -- insert into db_session.add(info) # 將SQL添加到查詢窗口 db_session.commit() # 執行窗口內SQL語句 db_session.close() # 關閉窗口
from sqlalchemy.orm import sessionmaker from create_table import engine,Users # 新建查詢窗口 session = sessionmaker(engine) # 打開查詢窗口 db_session = session() info_list = [Users(name='大G'),Users(name='小G')] db_session.add_all(info_list) # 將SQL添加到查詢窗口 db_session.commit() # 執行窗口內SQL語句 db_session.close()
from sqlalchemy.orm import sessionmaker from create_table import engine,Users # 新建查詢窗口 session = sessionmaker(engine) # 打開查詢窗口 db_session = session() # 查詢出全部數據 res = db_session.query(Users).all() print(res) for i in res: print(i.name) ''' [ <__main__.Users object at 0x000002955002C4E0>, <__main__.Users object at 0x000002955002C128>, <__main__.Users object at 0x000002955002C2B0> ] 略略略 大G 小G ''' # 查詢出全部數據中的第一條 ret = db_session.query(Users).first() print(ret) print(ret.name) ''' <__main__.Users object at 0x000002955002C4E0> 略略略 ''' # 簡單的待條件查詢 res = db_session.query(Users).filter(Users.id < 2).all() print(res) print(res[0].name) ''' [<__main__.Users object at 0x0000022A71C2B320>] 略略略 ''' # 並列條件查詢 res = db_session.query(Users).filter(Users.id<4,Users.name=="略略略").all() print(res) print(res[0].id) ''' [<__main__.Users object at 0x000001E378B2B4E0>] 1 '''
from sqlalchemy.orm import sessionmaker from create_table import engine,Users # 新建查詢窗口 session = sessionmaker(engine) # 打開查詢窗口 db_session = session() db_session.query(Users).filter(Users.id==1).update({'name':'哈哈哈'}) db_session.commit()
from sqlalchemy.orm import sessionmaker from create_table import engine,Users # 新建查詢窗口 session = sessionmaker(engine) # 打開查詢窗口 db_session = session() db_session.query(Users).filter(Users.id==1).delete() db_session.commit()
# 導入模塊 from sqlalchemy.ext.declarative import declarative_base from sqlalchemy.engine import create_engine from sqlalchemy.orm import relationship #用於創建關係 # relationship ORM精髓所在 from sqlalchemy import Column from sqlalchemy import String from sqlalchemy import Integer from sqlalchemy import ForeignKey # 實例化,創建基礎類 -- 關係映射類 model = declarative_base() # 建立引擎。用於指定庫 engine = create_engine('mysql+pymysql://root:123@127.0.0.1:3306/test?charset=utf8') class Student(model): __tablename__ = "student" id = Column(Integer, primary_key=True) name = Column(String(32), nullable=False) sch_id = Column(Integer, ForeignKey("school.id")) # 多對一關係存儲列 stu2sch = relationship("School", backref="sch2stu") class School(model): __tablename__ = "school" id = Column(Integer, primary_key=True) name = Column(String(32), nullable=False) model.metadata.create_all(engine)
建議前後給外鍵所在表添加數據 from sqlalchemy.orm import sessionmaker from create_table_ForeignKey import engine session = sessionmaker(engine) db_session = session() sc = School(name='哈佛大學') db_session.add(sc) db_session.commit() db_session.colse() # 在給外鍵所在的表添加數據 from sqlalchemy.orm import sessionmaker from create_table_ForeignKey import engine session = sessionmaker(engine) db_session = session() school_id = db_session.query(School).filter(School.name=='哈佛大學').first() print(school_id) stu = Student(name='大熊',sch_id=school_id.id) db_session.add(stu) db_session.commit()
from sqlalchemy.orm import sessionmaker from create_table_ForeignKey import engine from create_table_ForeignKey import Student,School session = sessionmaker(engine) db_session = session() stu = Student(name='靜香',stu2sch=School(name='劍橋大學')) db_session.add(stu) db_session.commit()
from sqlalchemy.orm import sessionmaker from s1.create_table_ForeignKey import engine from s1.create_table_ForeignKey import Student,School session = sessionmaker(engine) db_session = session() sch = School(name='牛津大學') sch.sch2stu = [ Student(name='胖虎'), Student(name='櫻桃小丸子') ] db_session.add(sch) db_session.commit()
from sqlalchemy.orm import sessionmaker from create_table_ForeignKey import engine from create_table_ForeignKey import Student,School session = sessionmaker(engine) db_session = session() res = db_session.query(Student).all() for sch in res: print(sch.stu2sch.name)
from sqlalchemy.orm import sessionmaker from create_table_ForeignKey import engine from create_table_ForeignKey import Student,School session = sessionmaker(engine) db_session = session() res = db_session.query(School).all() for sch in res: for s in sch.sch2stu: print(s.name)
from sqlalchemy.orm import sessionmaker from create_table import engine,Users # 新建查詢窗口 session = sessionmaker(engine) # 打開查詢窗口 db_session = session() sch = db_session.query(School).filter(School.name=='哈佛大學').first() stu = db_session.query(Student).filter(Student.id==sch.id).update({'name':'胖小虎'}) db_session.commit()
from sqlalchemy.orm import sessionmaker from create_table import engine,Users # 新建查詢窗口 session = sessionmaker(engine) # 打開查詢窗口 db_session = session() sch = db_session.query(School).filter(School.name=='哈佛大學').first() stu = db_session.query(Student).filter(Student.id==sch.id).delete() db_session.commit()
在多對多中。SQLAlchemy不會爲咱們自動建立出第三張表,須要手動建立編程
from sqlalchemy.ext.declarative import declarative_base from sqlalchemy import Column,Integer,String,ForeignKey from sqlalchemy.orm import relationship from sqlalchemy.engine import create_engine Model = declarative_base() engine = create_engine("mysql+pymysql://root:123@127.0.0.1:3306/test?charset=utf8") class Girls(Model): __tablename__ = "girl" id = Column(Integer,primary_key=True) name = Column(String(32),nullable=False) g2b = relationship("Boys",backref="b2g",secondary="hotel") class Boys(Model): __tablename__ = "boy" id = Column(Integer,primary_key=True) name = Column(String(32),nullable=False) class Hotels(Model): __tablename__ = "hotel" id = Column(Integer,primary_key=True) boy_id = Column(Integer,ForeignKey("boy.id")) girl_id = Column(Integer,ForeignKey("girl.id")) Model.metadata.create_all(engine)
from sqlalchemy.orm import sessionmaker from create_table_M2M import engine from create_table_M2M import Girls,Boys s = sessionmaker(engine) db_session = s() g = Girls(name='瑪麗蓮',g2b=[Boys(name='美國隊長'),Boys(name='閃電俠')]) db_session.add(g) db_session.commit()
from sqlalchemy.orm import sessionmaker from create_table_M2M import engine from create_table_M2M import Girls,Boys s = sessionmaker(engine) db_session = s() b = Boys(name='鋼鐵俠') b.b2g = [ Girls(name='蜘蛛精'), Girls(name='白骨精') ] db_session.add(b) db_session.commit()
from sqlalchemy.orm import sessionmaker from create_table_M2M import engine from create_table_M2M import Girls,Boys session = sessionmaker(engine) db_session = session() g_list = db_session.query(Girls).all() for g in g_list: for boy in g.g2b: print(boy.name)
from sqlalchemy.orm import sessionmaker from create_table_M2M import engine from create_table_M2M import Girls,Boys session = sessionmaker(engine) db_session = session() b_list = db_session.query(Boys).all() for b in b_list: for girl in b.b2g: print(girl.name)