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)

查询是否成功:

SQLAlchemy 连接MySQL数据库 sqlalchemy使用_数据

 

 

 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))

打印结果:

SQLAlchemy 连接MySQL数据库 sqlalchemy使用_数据_02

 

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)

输出结果:

SQLAlchemy 连接MySQL数据库 sqlalchemy使用_User_03

   过滤查询数据

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)

输出结果:

SQLAlchemy 连接MySQL数据库 sqlalchemy使用_数据_04

 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()

查询数据库验证是否有数据:

SQLAlchemy 连接MySQL数据库 sqlalchemy使用_User_05

 3.5修改数据

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

输出结果:

SQLAlchemy 连接MySQL数据库 sqlalchemy使用_sqlalchemy_06

 还可以利用pands进行批量修改数据