sqlalchemy基本操作
1.sqlalchemy介绍
sqlalchemy是一个数据库的ORM框架,提供SQL工具包以及对象关系映射(ORM),python操作数据库工具ORM将数据库中的表与面向对象语言中的类建立了一种对应关系,简单来说,使用sqlalchemy可以不用考虑使用什么数据库,只要是用sqlalchemy提供的方式写好语句,sqlalchemy会自动根据你连接的数据库吧你写的语句转化成对应的数据库sql语句。
ORM:对象关系映射
2.工具安装
pip install pymysql
pip install sqlalchemy
3.简单操作实例
3.1增加表(Table)
#encoding:utf-8 #date:2019/12/16 15:06 #@Author:sunny from sqlalchemy import Column,create_engine from sqlalchemy.orm import sessionmaker from sqlalchemy.ext.declarative import declarative_base from sqlalchemy import String,Integer,VARCHAR,Float #创建连接 engine=create_engine('mysql+pymysql://root:root@localhost/test',encoding='utf-8') #生成ORM基类 Base=declarative_base() class User(Base): #table名称 __tablename__='screen' #创建字段 screen_uuid=Column(Integer,primary_key=True) screen_name=Column(VARCHAR(20)) created=Column(Float(20)) #用于进行查找时的数据返回,更清晰的显示出来 def __repr__(self): return '<%s>' %(self.screen_uuid,self.screen_name,self.created) #进行指令的调用,即生成table Base.metadata.create_all(engine) session_class=sessionmaker(bind=engine)
查询是否成功:

3.2增加数据
#encoding:utf-8 #date:2019/12/17 10:30 #@Author:sunny from sqlalchemy import create_engine from sqlalchemy.ext.declarative import declarative_base from sqlalchemy import Column,Integer,String,Date,VARCHAR,Float from sqlalchemy.orm import sessionmaker #创建连接 engine=create_engine('mysql+pymysql://root:root@localhost/test',encoding='utf-8') #生成ORM基类 Base=declarative_base() #创建表结构 # Base.metadata.create_all(engine) session_class=sessionmaker(bind=engine)#创建与数据库的回话session class 注意这里返回给session的是一个类,不是实例 # Session=session_class()#生成session实例 Session = session_class() class User(Base): __tablename__ = 'user_table' # 创建字段 use_id = Column(VARCHAR(10), primary_key=True) user_name = Column(VARCHAR(20)) user_age = Column(VARCHAR(10)) #进行数据的条件修改 # data=Session.query(User).filter(User.user_name=='xiaoxiao').first() # data.user_name='xiao'#对类属性进行修改 # Session.commit()#结果的提交 # print(data.user_name)#打印刚修改的内容 #添加新的用户信息 fake_user=User(use_id=8,user_name='April',user_age=18) fake_user1=User(use_id=9,user_name='May',user_age=18) fake_user2=User(use_id=10,user_name='June',user_age=18) Session.add(fake_user)#添加单条数据 Session.add_all([fake_user1,fake_user2])#添加多条数据 Session.commit()#提交数据
#验证数据是否真的add成功 #将sqlalchemy result对象转换为dict对象 def orm_result_to_dict(r): _dict = {} for column in data.__table__.columns: _dict[column.name] = getattr(r, column.name) return _dict query_result=Session.query(User).filter_by(user_age=18) for data in query_result: print(orm_result_to_dict(data))
打印结果:

3.3查询数据
查询第一条数据/查询多条数据
#encoding:utf-8 #date:2019/12/16 17:33 #@Author:sunny from sqlalchemy import create_engine from sqlalchemy.ext.declarative import declarative_base from sqlalchemy import Column,Integer,String,Date,VARCHAR,Float from sqlalchemy.orm import sessionmaker #创建连接 engine=create_engine('mysql+pymysql://root:root@localhost/test',encoding='utf-8') #生成ORM基类 Base=declarative_base() class User(Base): __tablename__ = 'user_table' # 创建字段 use_id = Column(VARCHAR(10), primary_key=True) user_name = Column(VARCHAR(20)) user_age = Column(VARCHAR(10)) #创建表结构 # Base.metadata.create_all(engine) session_class=sessionmaker(bind=engine)#创建与数据库的回话session class 注意这里返回给session的是一个类,不是实例 #生成session实例 Session = session_class() #进行数据库查询 .all()输出所有的检索结果 .first() 输出第一条的结果 print("========打印查询数据==========") #方式一 data=Session.query(User).filter_by(use_id=1).first() print("查询第一条数据为:",data.use_id,data.user_name,data.user_age) #方式二 data1=Session.query(User).all() print(type(data1))#——>list print("查询第一条数据为:",data1[0].use_id,data1[0].user_name,data1[0].user_age)
输出结果:

过滤查询数据
data = Session.query(User).filter_by(user_name="dafang").all()
print("根据单过滤条件筛选:",data[0].user_age)
data2=Session.query(User).filter(User.use_id>1).filter(User.user_name=="xiangjie").all()
print("根据多条件进行筛选:",data2[0].user_age)
for i in data:
print("循环读取的数据为:",i.use_id, i.user_name, i.user_age)
输出结果:

3.4删除数据
#删除第一条数据 def del_data(): result=Session.query(User).first() Session.delete(result) Session.commit() print(result) #删除其中一条 def del_one_data(): result=Session.query(User).filter_by(use_id=1)[0] Session.delete(result) Session.commit() print(result) del_data() del_one_data() #删除user_age=18的数据信息 datas=Session.query(User).filter(User.user_age==18).delete() Session.commit()
查询数据库验证是否有数据:

3.5修改数据
#进行数据的条件修改 data=Session.query(User).filter(User.user_name=='weiji').first() data.user_name='xiaoxiao'#对类属性进行修改 Session.commit()#结果的提交 print(data.user_name)#打印刚修改的内容
输出结果:

还可以利用pands进行批量修改数据,这里不做过多说明,有兴趣可以自已动手试试。
善于跌倒仍喜爱奔跑~

浙公网安备 33010602011771号