[ mysql ] 关于sqlalchemy CRUD增删查改

说明都在注释里,主要为标记重点——

--------------------------------------------------------------------------------------------------------------
增加功能,Create:add

#保证环境下要有pymysql模块
import sqlalchemy
import sqlalchemy.ext.declarative#父类结构定义
import sqlalchemy.orm #ORM的所有工具
import sqlalchemy.orm.session#数据库操作的核心
import datetime #ORM组件要使用具体的日期类型

#定义数据库方言(直接在连接上通过字符串的形式定义了)以及链接地址
#当前给定的地址里面还有一个Mysql-connector操作组件,需要单独安装
MYSQL_URL = "mysql+mysqlconnector://root:123456@localhost:3306/xjsql"#mysql的方言+mysql的连接器://账号:密码@地址:端口/数据库

class User(sqlalchemy.ext.declarative.declarative_base()):
    __tablename__ = "table1" #数据库里数据表名称
    #随后定义字段与属性 与数据库结构匹配的数据类型
    gen = sqlalchemy.Column(sqlalchemy.String)
    name = sqlalchemy.Column(sqlalchemy.String, primary_key=True)#主键
    birthday = sqlalchemy.Column(sqlalchemy.String)

def main():
    engine = sqlalchemy.create_engine(MYSQL_URL,encoding='UTF8',echo=True)#引擎,echo为True 返回所有的操作信息
    sqlalchemy.orm.session.Session = sqlalchemy.orm.sessionmaker(bind=engine) #创建Session类型
    session = sqlalchemy.orm.session.Session() #实例化Session对象
    bir_date = datetime.datetime.strptime("2016-11-30","%Y-%m-%d")#字符串转为日期
    user = User(name='托马斯2',gen="人妖",birthday=bir_date)
    session.add(user)#对象操作 = Sql处理(ORM引擎转换)
    session.commit()#事务提交
    print("事务提交成功,当前名字为:%s"%user.name)
    session.close()

if __name__ == "__main__":
    main()

#此时实现了数据库的信息存储,同时发现在编写的过程中没有编写过任何一条具体的SQL语句,而最终的结果会由ORM组件帮助用户自动进行SQL处理。

说到引擎,偷来一张图表现原理:
在这里插入图片描述
--------------------------------------------------------------------------------------------------------------
查找:Research,query(c l a s s).get(key)
在这里,查询只能做到根据mainkey的查询需求,而在现实中的查询肯定要设置各种过滤条件。

#保证环境下要有pymysql模块
import sqlalchemy
import sqlalchemy.ext.declarative#父类结构定义
import sqlalchemy.orm #ORM的所有工具
import sqlalchemy.orm.session#数据库操作的核心
import datetime #ORM组件要使用具体的日期类型

#定义数据库方言(直接在连接上通过字符串的形式定义了)以及链接地址
#当前给定的地址里面还有一个Mysql-connector操作组件,需要单独安装
MYSQL_URL = "mysql+mysqlconnector://root:123456@localhost:3306/xjsql"#mysql的方言+mysql的连接器://账号:密码@地址:端口/数据库

class User(sqlalchemy.ext.declarative.declarative_base()):
    __tablename__ = "table1" #数据表名称
    #随后定义字段与属性 与数据库结构匹配的数据类型
    gen = sqlalchemy.Column(sqlalchemy.String)
    name = sqlalchemy.Column(sqlalchemy.String, primary_key=True)#主键
    birthday = sqlalchemy.Column(sqlalchemy.String)
    def __repr__(self) -> str: #__repr__返回查询结果
        return "用户姓名:%s 性别:%s 生日:%s" %(self.name,self.gen,self.birthday)

def main():
    engine = sqlalchemy.create_engine(MYSQL_URL,encoding='UTF8',echo=True)#引擎,echo为True 返回所有的操作信息
    sqlalchemy.orm.session.Session = sqlalchemy.orm.sessionmaker(bind=engine) #创建Session类型
    session = sqlalchemy.orm.session.Session() #实例化Session对象
    user = session.query(User).get("硕牛")#查询ID为1的数据
    print(user)
    session.close()

if __name__ == "__main__":
    main()

#此时实现了数据库的信息存储,同时发现在编写的过程中没有编写过任何一条具体的SQL语句,而最终的结果会由ORM组件帮助用户自动进行SQL处理。

-------------------------------------------------------------------------------------------------------------

修改:Update。merge

#保证环境下要有pymysql模块
import sqlalchemy
import sqlalchemy.ext.declarative#父类结构定义
import sqlalchemy.orm #ORM的所有工具
import sqlalchemy.orm.session#数据库操作的核心
import datetime #ORM组件要使用具体的日期类型

#定义数据库方言(直接在连接上通过字符串的形式定义了)以及链接地址
#当前给定的地址里面还有一个Mysql-connector操作组件,需要单独安装
MYSQL_URL = "mysql+mysqlconnector://root:123456@localhost:3306/xjsql"#mysql的方言+mysql的连接器://账号:密码@地址:端口/数据库

class User(sqlalchemy.ext.declarative.declarative_base()):
    __tablename__ = "table1" #数据表名称
    #随后定义字段与属性 与数据库结构匹配的数据类型
    gen = sqlalchemy.Column(sqlalchemy.String)
    name = sqlalchemy.Column(sqlalchemy.String, primary_key=True)#主键
    birthday = sqlalchemy.Column(sqlalchemy.String)

def main():
    engine = sqlalchemy.create_engine(MYSQL_URL,encoding='UTF8',echo=True)#引擎,echo为True 返回所有的操作信息
    sqlalchemy.orm.session.Session = sqlalchemy.orm.sessionmaker(bind=engine) #创建Session类型
    session = sqlalchemy.orm.session.Session() #实例化Session对象
    bir_date = datetime.datetime.strptime("2016-11-30","%Y-%m-%d")#字符串转为日期
    user = User(name='托马斯2',gen="女",birthday=bir_date)
    session.merge(user)#对象操作 = Sql处理(ORM引擎转换),更新哦
    session.commit()#事务提交
    print("事务提交成功,当前名字为:%s"%user.name)
    session.close()

if __name__ == "__main__":
    main()

#此时实现了数据库的信息存储,同时发现在编写的过程中没有编写过任何一条具体的SQL语句,而最终的结果会由ORM组件帮助用户自动进行SQL处理。

-------------------------------------------------------------------------------------------------------------

删除:Delete。需要先查再删,因为ORM以实体为主

#保证环境下要有pymysql模块
import sqlalchemy
import sqlalchemy.ext.declarative#父类结构定义
import sqlalchemy.orm #ORM的所有工具
import sqlalchemy.orm.session#数据库操作的核心
import datetime #ORM组件要使用具体的日期类型

#定义数据库方言(直接在连接上通过字符串的形式定义了)以及链接地址
#当前给定的地址里面还有一个Mysql-connector操作组件,需要单独安装
MYSQL_URL = "mysql+mysqlconnector://root:123456@localhost:3306/xjsql"#mysql的方言+mysql的连接器://账号:密码@地址:端口/数据库

class User(sqlalchemy.ext.declarative.declarative_base()):
    __tablename__ = "table1" #数据表名称
    #随后定义字段与属性 与数据库结构匹配的数据类型
    gen = sqlalchemy.Column(sqlalchemy.String)
    name = sqlalchemy.Column(sqlalchemy.String, primary_key=True)#主键
    birthday = sqlalchemy.Column(sqlalchemy.String)

def main():
    engine = sqlalchemy.create_engine(MYSQL_URL,encoding='UTF8',echo=True)#引擎,echo为True 返回所有的操作信息
    sqlalchemy.orm.session.Session = sqlalchemy.orm.sessionmaker(bind=engine) #创建Session类型
    session = sqlalchemy.orm.session.Session() #实例化Session对象
    bir_date = datetime.datetime.strptime("2016-11-30","%Y-%m-%d")#字符串转为日期
    user = session.query(User).get("硕狗") #删除实体,ORM是以实体为主
    session.delete(user)#对象操作 = Sql处理(ORM引擎转换),更新哦
    session.commit()#事务提交
    print("事务提交成功,当前名字为:%s"%user.name)
    session.close()

if __name__ == "__main__":
    main()

#此时实现了数据库的信息存储,同时发现在编写的过程中没有编写过任何一条具体的SQL语句,而最终的结果会由ORM组件帮助用户自动进行SQL处理。

-------------------------------------------------------------------------------------------------------------

过滤查询:query 及分页查询



#保证环境下要有pymysql模块
import sqlalchemy
import sqlalchemy.ext.declarative#父类结构定义
import sqlalchemy.orm #ORM的所有工具
import sqlalchemy.orm.session#数据库操作的核心
import datetime #ORM组件要使用具体的日期类型

#定义数据库方言(直接在连接上通过字符串的形式定义了)以及链接地址
#当前给定的地址里面还有一个Mysql-connector操作组件,需要单独安装
MYSQL_URL = "mysql+mysqlconnector://root:123456@localhost:3306/xjsql"#mysql的方言+mysql的连接器://账号:密码@地址:端口/数据库

class User(sqlalchemy.ext.declarative.declarative_base()):
    __tablename__ = "table1" #数据表名称
    #随后定义字段与属性 与数据库结构匹配的数据类型
    gen = sqlalchemy.Column(sqlalchemy.String)
    name = sqlalchemy.Column(sqlalchemy.String, primary_key=True)#主键
    birthday = sqlalchemy.Column(sqlalchemy.String)
    def __repr__(self) -> str:
        return "用户姓名:%s 性别:%s 生日:%s" %(self.name,self.gen,self.birthday)

def main():
    engine = sqlalchemy.create_engine(MYSQL_URL,encoding='UTF8',echo=True)#引擎,echo为True 返回所有的操作信息
    sqlalchemy.orm.session.Session = sqlalchemy.orm.sessionmaker(bind=engine) #创建Session类型
    session = sqlalchemy.orm.session.Session() #实例化Session对象

    #session.query(User).get("硕牛")#session.query(User)获得一个查询对象
    #user = session.query(User).filter_by(gen="男").all()#过滤条件,all之前只是定义了查询的SQL语句,而真正的查询是在执行了all()方法后才可以;返回的结果是列表,因为可能有多个结果返回
    #或
    #user = session.query(User).filter(User.gen=="男").all()#可以用于筛选,如User.Salary > 5000.0

    #分页操作,设置偏移量与获取数量
    #user = session.query(User).filter(User.name.like("%硕%")).offset(0).limit(1).all()#模糊匹配,offset(0).limit(1)为 输出 从偏移量0开始 移动1长度以内的内容,若去除则是输出全部
    #user = session.query(User).filter(User.name.like("%硕%")).slice(0, 1).all()  # slice原理同上
    user = session.query(User).filter(User.name.in_(["硕牛"])).all() #范围选择全匹配查询
    print(user)
    session.close()

if __name__ == "__main__":
    main()

#此时实现了数据库的信息存储,同时发现在编写的过程中没有编写过任何一条具体的SQL语句,而最终的结果会由ORM组件帮助用户自动进行SQL处理。

-------------------------------------------------------------------------------------------------------------

统计数据量

user_count = session.query(sqlalchemy.func.count(User.name)).one()

猜你喜欢

转载自blog.csdn.net/Sgmple/article/details/111302882
今日推荐