增add
- # 創建表1
- # 注:高級封裝
-
View Codeimport sqlalchemy # 調用鏈接數據庫 from sqlalchemy import create_engine # 調用基類Base from sqlalchemy.ext.declarative import declarative_base # 調用Column創建字段 加類型 from sqlalchemy import Column, Integer, String # create_engine 鏈接數據庫 mysql+pymysql:鏈接對象//用戶名:密碼@主機/DB # encoding='utf-8' 鏈接字符集 ,echo=True 把所有信息打印出來 engine = create_engine("mysql+pymysql://root:123456@192.168.1.154/xiang", encoding='utf-8', echo=True) # 生成orm基類 Base = declarative_base() # 繼承Base class User(Base): # __tablename__ 表名 __tablename__ = 'user' # Column字段(數據類型 Integer整數,primary_key=True主鍵) id = Column(Integer, primary_key=True) # Column字段(String(32)字符長度) name = Column(String(32)) # Column字段(String(64)字符長度) password = Column(String(64)) # 創建表結構 # 調用Baew基類方法metadata.create_all(鏈接數據庫) Base.metadata.create_all(engine)
- # 創建表2
-
# 注:第一種方式創建的表就是基於第2種方式的再封裝。
-
View Codefrom sqlalchemy import Table, MetaData, Column, Integer, String, ForeignKey from sqlalchemy.orm import mapper metadata = MetaData() # 創建表結構,調用metadata user = Table('user', metadata, Column('id', Integer, primary_key=True), Column('name', String(50)), Column('fullname', String(50)), Column('password', String(12)) ) # 創建類 class User(object): def __init__(self, name, fullname, password): self.name = name self.fullname = fullname self.password = password # 將表元數據與表構造分開創建,然 后通過mapper()函數與用戶類關聯。 mapper(User, user)
- # 表內插入數據
-
View Codeimport sqlalchemy # 調用鏈接數據庫 from sqlalchemy import create_engine # 調用基類Base from sqlalchemy.ext.declarative import declarative_base # 調用Column創建字段 加類型 from sqlalchemy import Column, Integer, String # 調用操作鏈接 from sqlalchemy.orm import sessionmaker # create_engine 鏈接數據庫 mysql+pymysql:鏈接對象//用戶名:密碼@主機/DB # encoding='utf-8' 鏈接字符集 ,echo=True 把所有信息打印出來 engine = create_engine("mysql+pymysql://root:123456@192.168.1.154/xiang",encoding='utf-8', #echo=True ) # 生成orm基類 Base = declarative_base() # 繼承Base class User(Base): # __tablename__ 表名 __tablename__ = 'user' # Column字段(數據類型 Integer整數,primary_key=True主鍵) id = Column(Integer, primary_key=True) # Column字段(String(32)字符長度) name = Column(String(32)) # Column字段(String(64)字符長度) password = Column(String(64)) # 返回一個可以用來表示對象的可打印字符串 def __repr__(self): return "<%s name:%s>"%(self.id,self.name) # 創建與數據庫的會話session class ,注意,這里返回給session的是個class,不是實例 # bind=engine 綁定engine socket實例 Session_class = sessionmaker(bind=engine) #生成session實例,如同pymysql內的cursor Session = Session_class() #+-+-++-+-++-+-++-+-++-+-++-+-++-+-++-+-# #+-+-++-+-++-+-++-+-++-+-++-+-++-+-++-+-# # 生成你要創建的數據對象,只是創建對象 user_obj = User(name="kevin",password="123456") #把要創建的數據對象添加到這個session里, 一會統一創建 Session.add(user_obj) #+-+-++-+-++-+-++-+-++-+-++-+-++-+-++-+-# #+-+-++-+-++-+-++-+-++-+-++-+-++-+-++-+-# #現此才統一提交,創建數據 Session.commit()
刪delete
- # 刪除表中字段中數據
-
View Codeimport sqlalchemy # 調用鏈接數據庫 from sqlalchemy import create_engine # 調用基類Base from sqlalchemy.ext.declarative import declarative_base # 調用Column創建字段 加類型 from sqlalchemy import Column, Integer, String # 調用操作鏈接 from sqlalchemy.orm import sessionmaker # create_engine 鏈接數據庫 mysql+pymysql:鏈接對象//用戶名:密碼@主機/DB # encoding='utf-8' 鏈接字符集 ,echo=True 把所有信息打印出來 engine = create_engine("mysql+pymysql://root:123456@192.168.1.154/xiang",encoding='utf-8', #echo=True ) # 生成orm基類 Base = declarative_base() # 繼承Base class User(Base): # __tablename__ 表名 __tablename__ = 'user' # Column字段(數據類型 Integer整數,primary_key=True主鍵) id = Column(Integer, primary_key=True) # Column字段(String(32)字符長度) name = Column(String(32)) # Column字段(String(64)字符長度) password = Column(String(64)) # 返回一個可以用來表示對象的可打印字符串 def __repr__(self): return "<%s name:%s>"%(self.id,self.name) # 創建與數據庫的會話session class ,注意,這里返回給session的是個class,不是實例 # bind=engine 綁定engine socket實例 Session_class = sessionmaker(bind=engine) #生成session實例,如同pymysql內的cursor Session = Session_class() #+-+-++-+-++-+-++-+-++-+-++-+-++-+-++-+-# #+-+-++-+-++-+-++-+-++-+-++-+-++-+-++-+-# # 取出刪除的字段對象 x = Session.query(User).filter(User.id=='1').first() # 使用delete刪除 Session.delete(x) # 提交事件執行 Session.commit() #+-+-++-+-++-+-++-+-++-+-++-+-++-+-++-+-# #+-+-++-+-++-+-++-+-++-+-++-+-++-+-++-+-# #現此才統一提交,創建數據 Session.commit()
改update
- # 修改列表下字段下數據
-
View Codimport sqlalchemy # 調用鏈接數據庫 from sqlalchemy import create_engine # 調用基類Base from sqlalchemy.ext.declarative import declarative_base # 調用Column創建字段 加類型 from sqlalchemy import Column, Integer, String # 調用操作鏈接 from sqlalchemy.orm import sessionmaker # create_engine 鏈接數據庫 mysql+pymysql:鏈接對象//用戶名:密碼@主機/DB # encoding='utf-8' 鏈接字符集 ,echo=True 把所有信息打印出來 engine = create_engine("mysql+pymysql://root:123456@192.168.1.154/xiang",encoding='utf-8', #echo=True ) # 生成orm基類 Base = declarative_base() # 繼承Base class User(Base): # __tablename__ 表名 __tablename__ = 'user' # Column字段(數據類型 Integer整數,primary_key=True主鍵) id = Column(Integer, primary_key=True) # Column字段(String(32)字符長度) name = Column(String(32)) # Column字段(String(64)字符長度) password = Column(String(64)) # 返回一個可以用來表示對象的可打印字符串 def __repr__(self): return "<%s name:%s>"%(self.id,self.name) # 創建與數據庫的會話session class ,注意,這里返回給session的是個class,不是實例 # bind=engine 綁定engine socket實例 Session_class = sessionmaker(bind=engine) #生成session實例,如同pymysql內的cursor Session = Session_class() #+-+-++-+-++-+-++-+-++-+-++-+-++-+-++-+-# #+-+-++-+-++-+-++-+-++-+-++-+-++-+-++-+-# # 打印第一個User列表內指定name字符下kevin數據的 第一個對象 data = Session.query(User).filter_by(name="n3").first() # data對象.字段 = ‘修改內容’ data.name = 'vin.xx' #+-+-++-+-++-+-++-+-++-+-++-+-++-+-++-+-# #+-+-++-+-++-+-++-+-++-+-++-+-++-+-++-+-# #現此才統一提交,創建數據 Session.commit()
查select
- # 查找表內指定字符
-
注:.all() 生成一個列表對象 .first() 打印第一個對象
-
View Codeimport sqlalchemy # 調用鏈接數據庫 from sqlalchemy import create_engine # 調用基類Base from sqlalchemy.ext.declarative import declarative_base # 調用Column創建字段 加類型 from sqlalchemy import Column, Integer, String # 調用操作鏈接 from sqlalchemy.orm import sessionmaker # create_engine 鏈接數據庫 mysql+pymysql:鏈接對象//用戶名:密碼@主機/DB # encoding='utf-8' 鏈接字符集 ,echo=True 把所有信息打印出來 engine = create_engine("mysql+pymysql://root:123456@192.168.1.154/xiang",encoding='utf-8', #echo=True ) # 生成orm基類 Base = declarative_base() # 繼承Base class User(Base): # __tablename__ 表名 __tablename__ = 'user' # Column字段(數據類型 Integer整數,primary_key=True主鍵) id = Column(Integer, primary_key=True) # Column字段(String(32)字符長度) name = Column(String(32)) # Column字段(String(64)字符長度) password = Column(String(64)) # 返回一個可以用來表示對象的可打印字符串 def __repr__(self): return "<%s name:%s>"%(self.id,self.name) # 創建與數據庫的會話session class ,注意,這里返回給session的是個class,不是實例 # bind=engine 綁定engine socket實例 Session_class = sessionmaker(bind=engine) #生成session實例,如同pymysql內的cursor Session = Session_class() #+-+-++-+-++-+-++-+-++-+-++-+-++-+-++-+-# #+-+-++-+-++-+-++-+-++-+-++-+-++-+-++-+-# # 使用.filter_by 不能使用“<>”指定對象時不需要調用類對象。 data = Session.query(User).filter_by(name="n3").all() # 取出data列表內的第一個內存地址下的name字段。 print(data[0].name) #+-+-++-+-++-+-++-+-++-+-++-+-++-+-++-+-# #+-+-++-+-++-+-++-+-++-+-++-+-++-+-++-+-# #現此才統一提交,創建數據 Session.commit()
- # 查找表內指定字符范圍查找
-
View Codeimport sqlalchemy # 調用鏈接數據庫 from sqlalchemy import create_engine # 調用基類Base from sqlalchemy.ext.declarative import declarative_base # 調用Column創建字段 加類型 from sqlalchemy import Column, Integer, String # 調用操作鏈接 from sqlalchemy.orm import sessionmaker # create_engine 鏈接數據庫 mysql+pymysql:鏈接對象//用戶名:密碼@主機/DB # encoding='utf-8' 鏈接字符集 ,echo=True 把所有信息打印出來 engine = create_engine("mysql+pymysql://root:123456@192.168.1.154/xiang",encoding='utf-8', #echo=True ) # 生成orm基類 Base = declarative_base() # 繼承Base class User(Base): # __tablename__ 表名 __tablename__ = 'user' # Column字段(數據類型 Integer整數,primary_key=True主鍵) id = Column(Integer, primary_key=True) # Column字段(String(32)字符長度) name = Column(String(32)) # Column字段(String(64)字符長度) password = Column(String(64)) # 返回一個可以用來表示對象的可打印字符串 def __repr__(self): return "<%s name:%s>"%(self.id,self.name) # 創建與數據庫的會話session class ,注意,這里返回給session的是個class,不是實例 # bind=engine 綁定engine socket實例 Session_class = sessionmaker(bind=engine) #生成session實例,如同pymysql內的cursor Session = Session_class() #+-+-++-+-++-+-++-+-++-+-++-+-++-+-++-+-# #+-+-++-+-++-+-++-+-++-+-++-+-++-+-++-+-# # 使用.filter可以使用"< == >'符號來指定范圍查找,前面需要加類對象 data = Session.query(User).filter(User.id>2).all() print(data) #+-+-++-+-++-+-++-+-++-+-++-+-++-+-++-+-# #+-+-++-+-++-+-++-+-++-+-++-+-++-+-++-+-# #現此才統一提交,創建數據 Session.commit()
- # 查找表內指定字符范圍,多個條件查找
-
View Codeimport sqlalchemy # 調用鏈接數據庫 from sqlalchemy import create_engine # 調用基類Base from sqlalchemy.ext.declarative import declarative_base # 調用Column創建字段 加類型 from sqlalchemy import Column, Integer, String # 調用操作鏈接 from sqlalchemy.orm import sessionmaker # create_engine 鏈接數據庫 mysql+pymysql:鏈接對象//用戶名:密碼@主機/DB # encoding='utf-8' 鏈接字符集 ,echo=True 把所有信息打印出來 engine = create_engine("mysql+pymysql://root:123456@192.168.1.154/xiang",encoding='utf-8', #echo=True ) # 生成orm基類 Base = declarative_base() # 繼承Base class User(Base): # __tablename__ 表名 __tablename__ = 'user' # Column字段(數據類型 Integer整數,primary_key=True主鍵) id = Column(Integer, primary_key=True) # Column字段(String(32)字符長度) name = Column(String(32)) # Column字段(String(64)字符長度) password = Column(String(64)) # 返回一個可以用來表示對象的可打印字符串 def __repr__(self): return "<%s name:%s>"%(self.id,self.name) # 創建與數據庫的會話session class ,注意,這里返回給session的是個class,不是實例 # bind=engine 綁定engine socket實例 Session_class = sessionmaker(bind=engine) #生成session實例,如同pymysql內的cursor Session = Session_class() #+-+-++-+-++-+-++-+-++-+-++-+-++-+-++-+-# #+-+-++-+-++-+-++-+-++-+-++-+-++-+-++-+-# # 可以通過filter多條件查詢 data = Session.query(User).filter(User.id >1).filter(User.id <3).all() print(data) #+-+-++-+-++-+-++-+-++-+-++-+-++-+-++-+-# #+-+-++-+-++-+-++-+-++-+-++-+-++-+-++-+-# #現此才統一提交,創建數據 Session.commit()
- # 統計獲取數量
-
View Codeimport sqlalchemy # 調用鏈接數據庫 from sqlalchemy import create_engine # 調用基類Base from sqlalchemy.ext.declarative import declarative_base # 調用Column創建字段 加類型 from sqlalchemy import Column, Integer, String # 調用操作鏈接 from sqlalchemy.orm import sessionmaker # create_engine 鏈接數據庫 mysql+pymysql:鏈接對象//用戶名:密碼@主機/DB # encoding='utf-8' 鏈接字符集 ,echo=True 把所有信息打印出來 engine = create_engine("mysql+pymysql://root:123456@192.168.1.154/xiang",encoding='utf-8', #echo=True ) # 生成orm基類 Base = declarative_base() # 繼承Base class User(Base): # __tablename__ 表名 __tablename__ = 'user' # Column字段(數據類型 Integer整數,primary_key=True主鍵) id = Column(Integer, primary_key=True) # Column字段(String(32)字符長度) name = Column(String(32)) # Column字段(String(64)字符長度) password = Column(String(64)) # 返回一個可以用來表示對象的可打印字符串 def __repr__(self): return "<%s name:%s>"%(self.id,self.name) # 創建與數據庫的會話session class ,注意,這里返回給session的是個class,不是實例 # bind=engine 綁定engine socket實例 Session_class = sessionmaker(bind=engine) #生成session實例,如同pymysql內的cursor Session = Session_class() #+-+-++-+-++-+-++-+-++-+-++-+-++-+-++-+-# #+-+-++-+-++-+-++-+-++-+-++-+-++-+-++-+-# # 使用.count()統計獲取數量 print(Session.query(User).count()) #+-+-++-+-++-+-++-+-++-+-++-+-++-+-++-+-# #+-+-++-+-++-+-++-+-++-+-++-+-++-+-++-+-# #現此才統一提交,創建數據 Session.commit()
- # 分組獲取相同數
-
View Codeimport sqlalchemy # 調用鏈接數據庫 from sqlalchemy import create_engine # 調用基類Base from sqlalchemy.ext.declarative import declarative_base # 調用Column創建字段 加類型 from sqlalchemy import Column, Integer, String # 調用操作鏈接 from sqlalchemy.orm import sessionmaker # create_engine 鏈接數據庫 mysql+pymysql:鏈接對象//用戶名:密碼@主機/DB # encoding='utf-8' 鏈接字符集 ,echo=True 把所有信息打印出來 engine = create_engine("mysql+pymysql://root:123456@192.168.1.154/xiang",encoding='utf-8', #echo=True ) # 生成orm基類 Base = declarative_base() # 繼承Base class User(Base): # __tablename__ 表名 __tablename__ = 'user' # Column字段(數據類型 Integer整數,primary_key=True主鍵) id = Column(Integer, primary_key=True) # Column字段(String(32)字符長度) name = Column(String(32)) # Column字段(String(64)字符長度) password = Column(String(64)) # 返回一個可以用來表示對象的可打印字符串 def __repr__(self): return "<%s name:%s>"%(self.id,self.name) # 創建與數據庫的會話session class ,注意,這里返回給session的是個class,不是實例 # bind=engine 綁定engine socket實例 Session_class = sessionmaker(bind=engine) #生成session實例,如同pymysql內的cursor Session = Session_class() #+-+-++-+-++-+-++-+-++-+-++-+-++-+-++-+-# #+-+-++-+-++-+-++-+-++-+-++-+-++-+-++-+-# from sqlalchemy import func # func.count統計數量(類對象.統計字段),顯示字段 # .group_by(統計字段).all() print(Session.query(func.count(User.name),User.name).group_by(User.name).all()) #相當於原生sql為 #SELECT count(user.name) AS count_1, user.name AS user_name #FROM user GROUP BY user.name #+-+-++-+-++-+-++-+-++-+-++-+-++-+-++-+-# #+-+-++-+-++-+-++-+-++-+-++-+-++-+-++-+-# #現此才統一提交,創建數據 Session.commit()
- # 兩張表 字段匹配 查找相同數據
-
View Codeimport sqlalchemy # 調用鏈接數據庫 from sqlalchemy import create_engine # 調用基類Base from sqlalchemy.ext.declarative import declarative_base # 調用Column創建字段 加類型 from sqlalchemy import Column, Integer, String,DATE,Enum # 調用操作鏈接 from sqlalchemy.orm import sessionmaker # create_engine 鏈接數據庫 mysql+pymysql:鏈接對象//用戶名:密碼@主機/DB # encoding='utf-8' 鏈接字符集 ,echo=True 把所有信息打印出來 engine = create_engine("mysql+pymysql://root:123456@192.168.1.154/xiang",encoding='utf-8', #echo=True ) # 生成orm基類 Base = declarative_base() # 繼承Base class User(Base): # __tablename__ 表名 __tablename__ = 'user' # Column字段(數據類型 Integer整數,primary_key=True主鍵) id = Column(Integer, primary_key=True) # Column字段(String(32)字符長度) name = Column(String(32)) # Column字段(String(64)字符長度) password = Column(String(64)) # 返回一個可以用來表示對象的可打印字符串 def __repr__(self): return "<%s name:%s>"%(self.id,self.name) class User2(Base): # __tablename__ 表名 __tablename__ = 'user2' # Column字段(數據類型 Integer整數,primary_key=True主鍵) id = Column(Integer, primary_key=True) # Column字段(String(32)字符長度) name = Column(String(32)) # Column字段(String(64)字符長度) password = Column(String(64)) # 返回一個可以用來表示對象的可打印字符串 def __repr__(self): return "<%s name:%s>"%(self.id,self.name) # 創建與數據庫的會話session class ,注意,這里返回給session的是個class,不是實例 # bind=engine 綁定engine socket實例 Session_class = sessionmaker(bind=engine) #生成session實例,如同pymysql內的cursor Session = Session_class() #+-+-++-+-++-+-++-+-++-+-++-+-++-+-++-+-# #+-+-++-+-++-+-++-+-++-+-++-+-++-+-++-+-# # Session.query(表1,表2).filter(表1.字段==表2.字段).all() print(Session.query(User,User2).filter(User.id==User2.id).all()) #+-+-++-+-++-+-++-+-++-+-++-+-++-+-++-+-# #+-+-++-+-++-+-++-+-++-+-++-+-++-+-++-+-# #現此才統一提交,創建數據 Session.commit()
- # 兩張表 外鍵匹配 查找相同數據
- 注:通過join匹配兩個表中的外鍵字段 打印數據
-
View Codeimport sqlalchemy # 調用鏈接數據庫 from sqlalchemy import create_engine # 調用基類Base from sqlalchemy.ext.declarative import declarative_base # 調用Column創建字段 加類型 from sqlalchemy import Column, Integer, String,DATE,Enum # 調用操作鏈接 from sqlalchemy.orm import sessionmaker # create_engine 鏈接數據庫 mysql+pymysql:鏈接對象//用戶名:密碼@主機/DB # encoding='utf-8' 鏈接字符集 ,echo=True 把所有信息打印出來 engine = create_engine("mysql+pymysql://root:123456@192.168.1.154/xiang",encoding='utf-8', #echo=True ) # 生成orm基類 Base = declarative_base() # 繼承Base class User(Base): # __tablename__ 表名 __tablename__ = 'user' # Column字段(數據類型 Integer整數,primary_key=True主鍵) id = Column(Integer, primary_key=True) # Column字段(String(32)字符長度) name = Column(String(32)) # Column字段(String(64)字符長度) password = Column(String(64)) # 返回一個可以用來表示對象的可打印字符串 def __repr__(self): return "<%s name:%s>"%(self.id,self.name) class User2(Base): # __tablename__ 表名 __tablename__ = 'user2' # Column字段(數據類型 Integer整數,primary_key=True主鍵) id = Column(Integer, primary_key=True) # Column字段(String(32)字符長度) name = Column(String(32)) # Column字段(String(64)字符長度) password = Column(String(64)) # 返回一個可以用來表示對象的可打印字符串 def __repr__(self): return "<%s name:%s>"%(self.id,self.name) # 創建與數據庫的會話session class ,注意,這里返回給session的是個class,不是實例 # bind=engine 綁定engine socket實例 Session_class = sessionmaker(bind=engine) #生成session實例,如同pymysql內的cursor Session = Session_class() #+-+-++-+-++-+-++-+-++-+-++-+-++-+-++-+-# #+-+-++-+-++-+-++-+-++-+-++-+-++-+-++-+-# # Session.query(表1).join(表2).all() print(Session.query(User).join(User2).all()) # Session.query(表1).join(表2,isouter=True) print(Session.query(User).join(User2,isouter=True).all()) #+-+-++-+-++-+-++-+-++-+-++-+-++-+-++-+-# #+-+-++-+-++-+-++-+-++-+-++-+-++-+-++-+-# #現此才統一提交,創建數據 Session.commit()
其他操作
- # 回滾操作
-
View Codeimport sqlalchemy # 調用鏈接數據庫 from sqlalchemy import create_engine # 調用基類Base from sqlalchemy.ext.declarative import declarative_base # 調用Column創建字段 加類型 from sqlalchemy import Column, Integer, String # 調用操作鏈接 from sqlalchemy.orm import sessionmaker # create_engine 鏈接數據庫 mysql+pymysql:鏈接對象//用戶名:密碼@主機/DB # encoding='utf-8' 鏈接字符集 ,echo=True 把所有信息打印出來 engine = create_engine("mysql+pymysql://root:123456@192.168.1.154/xiang",encoding='utf-8', #echo=True ) # 生成orm基類 Base = declarative_base() # 繼承Base class User(Base): # __tablename__ 表名 __tablename__ = 'user' # Column字段(數據類型 Integer整數,primary_key=True主鍵) id = Column(Integer, primary_key=True) # Column字段(String(32)字符長度) name = Column(String(32)) # Column字段(String(64)字符長度) password = Column(String(64)) # 返回一個可以用來表示對象的可打印字符串 def __repr__(self): return "<%s name:%s>"%(self.id,self.name) # 創建與數據庫的會話session class ,注意,這里返回給session的是個class,不是實例 # bind=engine 綁定engine socket實例 Session_class = sessionmaker(bind=engine) #生成session實例,如同pymysql內的cursor Session = Session_class() #+-+-++-+-++-+-++-+-++-+-++-+-++-+-++-+-# #+-+-++-+-++-+-++-+-++-+-++-+-++-+-++-+-# # 添加一條數據User fuck_user = User(name='Rain',password='12345') Session.add(fuck_user) # 這時看session里有你剛添加和修改的數據 # User.name.in_([數據1,數據2]),打印數據1或數據2 print(Session.query(User).filter(User.name.in_(['Jack','rain'])).all()) # 回滾命令 Session.rollback() # 數據回滾后再次查看 print(Session.query(User).filter(User.name.in_(['Jack','rain'])).all()) #+-+-++-+-++-+-++-+-++-+-++-+-++-+-++-+-# #+-+-++-+-++-+-++-+-++-+-++-+-++-+-++-+-# #現此才統一提交,創建數據 Session.commit()
