SQLAlchemy完成mysql数据库表的增、删、查、改操作案例

### SQLAlchemy完成mysql数据库表的增、删、查、改操作案例

##### 1.安装

```
pip install sqlalchemy  -i https://mirrors.aliyun.com/pypi/simple
pip install  pymysql    -i https://mirrors.aliyun.com/pypi/simple

   python -m venv myenv
   source myenv/bin/activate  # 对于Linux/macOS
   myenv\Scripts\activate     # 对于Windows
   pip install gdal
   
 conda安装  https://blog.youkuaiyun.com/ks2686/article/details/139183535
 1.conda activate 报错 CondaError: Run ‘conda init‘ before ‘conda activate‘
 解决  source activate
 然后 conda activate myenv
 停止 conda deactivate
 conda 安装 gdal https://blog.youkuaiyun.com/ylfmsn/article/details/129544359
 
 conda环境创建 https://blog.youkuaiyun.com/potato123232/article/details/118419642
```

> 
from sqlalchemy import Column, String, Integer, create_engine, func
from sqlalchemy.orm import declarative_base
from sqlalchemy.orm import sessionmaker
import json
# 引入或逻辑关键字or_
from sqlalchemy import or_
# 与逻辑(and_)
from sqlalchemy import and_

# 申明基类对象
Base = declarative_base()


# 数据库连接初始化
class MysqlSqlalchemy(object):
    def __init__(self):
        # 创建mysql连接引擎
        self.engine = create_engine('mysql+pymysql://root:123456@localhost:3306/wow?charset=utf8')
        # 比较好的习惯是现实销毁引擎,会有助于python的垃圾回收
        self.engine.dispose()
        # 创建表
        Base.metadata.create_all(self.engine, checkfirst=True)
        # 创建mysql的session连接对象
        self.session = sessionmaker(bind=self.engine)()


# 定义user表实体对象
class User(Base):
    # 定义表名
    __tablename__ = 'user'
    # 定义字段
    id = Column(Integer, primary_key=True, autoincrement=True)
    name = Column(String(255))
    age = Column(Integer)


class Address(Base):
    # 定义表名
    __tablename__ = 'address'
    # 定义字段
    user_id = Column(Integer, primary_key=True, autoincrement=True)
    address = Column(String(255))


if __name__ == '__main__':
    # 初始化mysql数据库连接,获取session
    session = MysqlSqlalchemy().session


    # 11.新增一条数据
    # try:
    #     # 开始一个新的事务
    #     session.begin()
    #     user1 = User(name='xiaoming11', age=2333)
    #     user2 = User(name='xiaoming21', age=233)
    #     session.add(user1)
    #     session.add(user2)
    #     # 提交事务,将所有更改保存到数据库
    #     session.commit()
    # except Exception as e:
    #     # 如果在添加用户过程中发生错误,则回滚事务
    #     session.rollback()
    #     print(f"An error occurred: {e}")
    # finally:
    #     # 关闭会话
    #     session.close()

    # 22.新增多条数据
    # datas = [
    #     User(name='张三', age=20),
    #     User(name='李四', age=21),
    #     User(name='王五', age=22),
    # ]
    # session.add_all(datas)
    # session.commit()

    # 33.查询user用户表中的全部数据
    # result = session.query(User.id, User.name, User.age).all()  #查询所有
    # result = session.query(User).filter(User.name.like("%xiaoming")).all()

    # def user_to_dict(user):  # 11.定义一个方法来将 User 对象转换为字典
    #     return {
    #         'id': user.id,
    #         'name': user.name,
    #         'age': user.age
    #     }
    # # 将查询结果转换为字典列表
    # users_dict = [user_to_dict(user) for user in result]
    # print(users_dict)
    # # 将字典列表转换为 JSON 对象数组
    # users_json = json.dumps(users_dict, ensure_ascii=False)
    # # 打印 JSON 对象数组
    # print(users_json)
    # ----------------------------------------------------------->
    # 1 返回模糊查询的所有结果名字
    # for user in result:
    #     print(user.name)

    # 2 如果你想要返回的是一个具体的属性列表,比如每个用户的 ID,你可以这样修改:
    # user_ids = [user.id for user in result]
    # print(user_ids)

    # 3模糊查询有多少条记录是xiaoming的数据
    # result = session.query(User).filter(User.name.like("%xiaoming")).count()
    # result = session.query(func.count(User.age)).scalar()  #4 统计多少条记录
    # print(result)

    # 4.更新user用户表中的数据-方式一
    # 先查询用户id为1的数据
    # user_id = 1
    # query_user = session.query(User).filter_by(id=user_id).first()
    # # 更新用户id为1的数据
    # query_user.name = "赵六"
    # query_user.age = 25
    # # 提交修改
    # session.commit()

    # 5.更新user用户表中的数据-方式二 使用update()方法直接更新字段值
    # user_id = 1
    # session.query(User).filter(User.id == user_id).update({User.name: "王五", User.age: 18})
    # session.commit()

    # 6.根据id删除一条user表中用户数据
    # 根据id删除数据
    # user_id = 1
    # del_count = session.query(User).filter(User.id == user_id).delete()
    # print('删除数目:', del_count)
    # session.commit()

    # # 7 查询id不为1、3、5的记录,结果包含id为2、4的两条记录
    # result = session.query(User).filter(~User.id.in_([1, 3, 5])).all()
    # # 定义一个方法来将 User 对象转换为字典
    # def user_to_dict(user):
    #     return {
    #         'id': user.id,
    #         'name': user.name,
    #         # 添加其他字段...
    #     }
    # # 将查询结果转换为字典列表
    # users_dict = [user_to_dict(user) for user in result]
    # # 将字典列表转换为 JSON 对象数组
    # users_json = json.dumps(users_dict, ensure_ascii=False)
    # # 打印 JSON 对象数组
    # print(users_json)

    # 8.直接在filter中添加多个条件即表示与逻辑
    # result = session.query(User).filter(User.name == 'xiaoming', User.age == 23).all()
    # for user in result:
    #     print(user.name, user.age)

    # 9. 或逻辑or 查询title是Engineer或者salary为3000的记录,返回结果为id为1、2、3、4的记录
    # result = session.query(User).filter(or_(User.name == 'xiaoming', User.age == 233)).all()
    # for user in result:
    #     print(user.name, user.age)

    # 10. 用and_进行逻辑查询
    # result = session.query(User).filter(and_(User.name == 'xiaoming', User.age == 233))
    # for user in result:
    #     print(user.name, user.age)

    # 11.批量插入新增
    # objects = [User(name="u1", age=11), User(name="u2", age=4), User(name="u3", age=76)]
    # session.add_all(objects)
    # session.commit()

    # 12.删除单条记录
    # user3 = session.query(User).filter_by(name='u1').first()
    # session.delete(user3)
    # session.commit()

    # 13.删除多条记录
    # users = session.query(User).filter(User.name.in_(['u3', 'u2'])).all()
    # for user in users:
    #     session.delete(user)
    # session.commit()

    # 14.多表关联查询
    # query = session.query(User, Address).join(Address, User.id == Address.user_id)
    # for user in query.all():
    #     print(user[0].name)

    # 15.多表关联查询 将查询用户表里面id=2的在地址表对应user_id=2的数据
    # 定义一个方法来将 User 和 Address 对象转换为字典
    # def user_address_to_dict(user, address):
    #     return {
    #         'user_id': user.id,
    #         'user_name': user.name,
    #         'address': address.address,
    #     }
    # result = session.query(User, Address).join(Address, User.id == Address.user_id).all()
    # # 将查询结果转换为字典列表
    # results_dict = []
    # for user, address in result:
    #     if user.id == 2:
    #         results_dict.append(user_address_to_dict(user, address))
    # # 将字典列表转换为 JSON 对象数组
    # results_json = json.dumps(results_dict, ensure_ascii=False)
    # # 打印 JSON 对象数组
    # print(results_json) #[{"user_id": 2, "user_name": "xiaoming", "address": "xxxxx"}]



    

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值