不用懷疑,你確定用過Django中的orm,這個orm框架是django框架中本身封裝的,在Django中配置和使用較爲簡單,可是並不適用於其餘web框架,而今天說的sqlalchemy是兼容python語言的orm框架,相信你已經明白誰牛逼!python
下面,接下來....mysql
還有比案例更好的教程嗎,那下面請您享用爲您準備好的大餐...web
導入sqlachemy資源包sql
案例數據庫
from sqlalchemy.ext.declarative import declarative_base BaseModel = declarative_base() # 建立 Class / Table from sqlalchemy import Column,Integer,String class User(BaseModel): __tablename__ = "user" # 建立Table時名字 id = Column(Integer,primary_key=True,autoincrement=True) name = Column(String(32),nullable=False,index=True,unique=True) # Column 定義數據列 # int string 數據類型 # 數據庫引擎的建立: from sqlalchemy.engine import create_engine engine = create_engine("mysql+pymysql://root:123@127.0.0.1:3306/dbname?charset=utf8") # 數據庫鏈接驅動語句 #利用 User 去數據庫建立 user Table BaseModel.metadata.create_all(engine) # 數據庫引擎 # 數據庫呢? 數據庫服務器地址呢? # 數據庫鏈接呢?
案例django
# 模擬 navcat 操做 # 1.選擇數據庫 from sqlalchemy.engine import create_engine engine = create_engine("mysql+pymysql://root:123@127.0.0.1:3306/s21?charset=utf8") # 2.選擇表 # 3.建立查詢窗口 from sqlalchemy.orm import sessionmaker select_db = sessionmaker(engine) # 選中數據庫 db_session = select_db() # 已經打開查詢窗口 # 4.寫入SQL語句 user = User(name="Alexander.DSB.Li") # == insert into user(`name`) value ("Alexander.DSB.Li") user_list = [User(name="Alex's Father"),User(name="李傑")] # 放入查詢窗口 db_session.add(user) db_session.add_all(user_list) # 5.提交sql語句 db_session.commit() # 6.關閉查詢窗口 db_session.close() # 簡單無條件查詢 # """ # select * from user table_user == class_User # """ res = db_session.query(User).all() # 查詢所有符合條件的數據 res = db_session.query(User).first() # 查詢符合條件的第一條數據 print(res.id,res.name) # 簡單條件查詢 # """ # select * from user where id=3 # """ res = db_session.query(User).filter(User.id==3).all() print(res[0].id,res[0].name) res = db_session.query(User).filter_by(id=3).all() res = db_session.query(User).filter(User.id==3 , User.name == "123").all() print(res) # is_true_or_false = User.id==3 and User.name == "123" # 修改數據 update res = db_session.query(User).filter(User.id == 1).update({"name":"李亞歷山大"}) db_session.commit() db_session.close() # 刪除數據 res = db_session.query(User).filter(User.id == 2).delete() db_session.commit() db_session.close()
案例服務器
from sqlalchemy.ext.declarative import declarative_base from sqlalchemy import Column,Integer,String,ForeignKey from sqlalchemy.engine import create_engine #ORM精髓 relationship from sqlalchemy.orm import relationship engine = create_engine("mysql+pymysql://root:123@127.0.0.1:3306/s21?charset=utf8") BaseModel = declarative_base() # 一對多 class School(BaseModel): __tablename__ = "school" id = Column(Integer,primary_key=True) name = Column(String(32),nullable=False) class Student(BaseModel): __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") BaseModel.metadata.create_all(engine)
使用案例session
from sqlalchemy.orm import sessionmaker from app01.static.上午.createForeignKey import engine select_db = sessionmaker(engine) db_session = select_db() # 增長數據 # 先創建一個學校 再查詢這個學校的id 利用這個ID 再去建立學生添加sch_id # relationship 正向添加 relationship字段出如今哪一個類 # stu = Student(name="DragonFire",stu2sch=School(name="OldBoyBeijing")) # stu sql 語句 # db_session.add(stu) # db_session.commit() # db_session.close() # relationship 反向添加 # sch = School(name="OldBoyShanghai") # sch.sch2stu = [ # Student(name="趙麗穎"), # Student(name="馮紹峯") # ] # # db_session.add(sch) # db_session.commit() # db_session.close() # 查詢 relationship 正向 # res = db_session.query(Student).all() # for stu in res: # print(stu.name,stu.stu2sch.name) # 查詢 relationship 反向 # res = db_session.query(School).all() # for sch in res: # # print(sch.name,len(sch.sch2stu)) 學校裏面有多少學生 # for stu in sch.sch2stu: # print(sch.name,stu.name)
案例app
from sqlalchemy.ext.declarative import declarative_base from sqlalchemy import Column,Integer,String,ForeignKey from sqlalchemy.engine import create_engine from sqlalchemy.orm import relationship BaseModel = declarative_base() engine = create_engine("mysql+pymysql://root:123@127.0.0.1:3306/s21?charset=utf8") class Girl(BaseModel): __tablename__ = "girl" id = Column(Integer,primary_key=True) name = Column(String(32),nullable=False) gyb = relationship("Boy",backref="byg",secondary="hotel") # secondary="hotel" 數據表中的數據才能證實二者關係 class Boy(BaseModel): __tablename__ = "boy" id = Column(Integer,primary_key=True) name = Column(String(32),nullable=False) class Hotel(BaseModel): __tablename__ = "hotel" id = Column(Integer,primary_key=True) bid = Column(Integer,ForeignKey("boy.id")) gid = Column(Integer,ForeignKey("girl.id")) BaseModel.metadata.create_all(engine)
案例框架
from sqlalchemy.orm import sessionmaker from app01.static.上午.createM2M import engine select_db = sessionmaker(engine) db_session = select_db() # 增長數據 relationship 正向添加 # g = Girl(name="趙麗穎",gyb=[Boy(name="DragonFire"),Boy(name="馮紹峯")]) # db_session.add(g) # db_session.commit() # db_session.close() # 增長數據 relationship 反向添加 # b = Boy(name="李傑") # b.byg = [ # Girl(name="羅玉鳳"), # Girl(name="朱利安"), # Girl(name="喬碧蘿") # ] # # db_session.add(b) # db_session.commit() # db_session.close() # 查詢 relationship 正向 # res = db_session.query(Girl).all() # for g in res: # print(g.name,len(g.gyb)) # 查詢 relationship 反向 # res = db_session.query(Boy).all() # for b in res: # print(b.name,len(b.byg))