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进行批量修改数据