增add
- # 创建表1
- # 注:高级封装
-
import 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种方式的再封装。
-
from 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)
- # 表内插入数据
-
import 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
- # 删除表中字段中数据
-
import 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
- # 修改列表下字段下数据
-
import 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() 打印第一个对象
-
import 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()
- # 查找表内指定字符范围查找
-
import 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()
- # 查找表内指定字符范围,多个条件查找
-
import 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()
- # 统计获取数量
-
import 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()
- # 分组获取相同数
-
import 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()
- # 两张表 字段匹配 查找相同数据
-
import 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匹配两个表中的外键字段 打印数据
-
import 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()
- # 回滚操作
-
import 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()