1、添加数据

代码部分:

  1. from sqlalchemy import create_engine
  2. from sqlalchemy import Column, Integer, String
  3. from sqlalchemy.ext.declarative import declarative_base
  4. # 导入sessionmaker类
  5. from sqlalchemy.orm.session import sessionmaker
  6. # 定义引擎
  7. HOSTNAME = "127.0.0.1"
  8. DATABASE = "my_sql"
  9. PORT = 3306
  10. USERNAME = "root"
  11. PASSWORD = "147258"
  12. # 创建引擎
  13. MS_DP = f"mysql+mysqlconnector://{USERNAME}:{PASSWORD}@{HOSTNAME}:{PORT}/{DATABASE}?charset=utf8"
  14. engine = create_engine(MS_DP)
  15. # 定义基类,不要忘记传入引擎
  16. Base = declarative_base(engine)
  17. # 通过ORM模型操控数据库
  18. class Sheet(Base):
  19. __tablename__ = "sheet3"
  20. id = Column(Integer, primary_key=True, autoincrement=True)
  21. name = Column(String(10), nullable=False)
  22. gender = Column(Integer, default=1, comment="1为男,0为女")
  23. # 将模型映射到数据库
  24. Base.metadata.create_all()
  25. # 增加一条数据,实例化数据库并增加属性(必须通过关键字传参)
  26. information = Sheet(name="龚祝俊", gender=0)
  27. # 实例化sessionmaker类,并绑定引擎
  28. Session = sessionmaker(bind=engine)
  29. # 由于sessionmaker类中有__call__()魔法方法,因此可以将其类作为方法进行调用
  30. session = Session()
  31. # 添加数据
  32. session.add(information)
  33. # 将数据提交到数据库中
  34. session.commit()

代码解读:
第一步:导入sessionmaker类

  1. from sqlalchemy.orm.session import sessionmaker

第二步:创建数据,由于一条记录相当于一个对象,也就是通过实例化数据实现

  1. information = Sheet(name="龚祝俊", gender=0)

第三步:实例化sessionmaker类,并添加bind参数,也就是定义的引擎名(特别注意call()方法)

  1. # 实例化sessionmaker类,并绑定引擎
  2. Session = sessionmaker(bind=engine)
  3. # 由于sessionmaker类中有__call__()魔法方法,因此可以将其类作为方法进行调用
  4. session = Session()

第四步:添加数据(.add()与.add_all())

  1. session.add(information)

add方法,一次添加一天数据,如上面的代码所示
add_all方法,可以添加多天数据,但是要以列表的形式进行传递

  1. session.add_all([information1, information2, information3])

第五步:提交数据

  1. session.commit()

2、查询数据

1、查询所有

代码部分:

  1. from sqlalchemy import create_engine
  2. from sqlalchemy import Column, Integer, String
  3. from sqlalchemy.ext.declarative import declarative_base
  4. # 导入sessionmaker类
  5. from sqlalchemy.orm.session import sessionmaker
  6. # 定义引擎
  7. HOSTNAME = "127.0.0.1"
  8. DATABASE = "my_sql"
  9. PORT = 3306
  10. USERNAME = "root"
  11. PASSWORD = "147258"
  12. # 创建引擎
  13. MS_DP = f"mysql+mysqlconnector://{USERNAME}:{PASSWORD}@{HOSTNAME}:{PORT}/{DATABASE}?charset=utf8"
  14. engine = create_engine(MS_DP)
  15. # 定义基类,不要忘记传入引擎
  16. Base = declarative_base(engine)
  17. # 通过ORM模型操控数据库
  18. class Sheet(Base):
  19. __tablename__ = "sheet3"
  20. id = Column(Integer, primary_key=True, autoincrement=True)
  21. name = Column(String(10), nullable=False)
  22. gender = Column(Integer, default=1, comment="1为男,0为女")
  23. # 将模型映射到数据库
  24. Base.metadata.create_all()
  25. # 实例化sessionmaker类,并绑定引擎
  26. Session = sessionmaker(bind=engine)
  27. # 由于sessionmaker类中有__call__()魔法方法,因此可以将其类作为方法进行调用
  28. session = Session()
  29. # 定义dates变量接受数据
  30. dates = session.query(Sheet).all()
  31. # 返回的是一个列表,可以通过for循环配合对应字段进行取值
  32. for date in dates:
  33. print(date.id, date.name, date.gender)
  • 通过循环取值

代码解读:

  1. # 实例化sessionmaker类,并绑定引擎
  2. Session = sessionmaker(bind=engine)
  3. # 由于sessionmaker类中有__call__()魔法方法,因此可以将其类作为方法进行调用
  4. session = Session()

这个是一定要写的

  1. dates = session.query(Sheet).all()

调用query(模型名)来获取数据库中的数据

  1. for date in dates:
  2. print(date.id, date.name, date.gender)

由于返回的是列表可以通过循环进行取值,对每一条数据中的字段取值只需要写上对应的字段名即可

  • 通过循环配合str()进行取值 ```python from sqlalchemy import create_engine from sqlalchemy import Column, Integer, String from sqlalchemy.ext.declarative import declarative_base from sqlalchemy.orm.session import sessionmaker

定义引擎

HOSTNAME = “127.0.0.1” DATABASE = “my_sql” PORT = 3306 USERNAME = “root” PASSWORD = “147258”

MS_DP = f”mysql+mysqlconnector://{USERNAME}:{PASSWORD}@{HOSTNAME}:{PORT}/{DATABASE}?charset=utf8” engine = create_engine(MS_DP)

Base = declarative_base(engine)

class Sheet(Base):

  1. __tablename__ = "sheet3"
  2. id = Column(Integer, primary_key=True, autoincrement=True)
  3. name = Column(String(10), nullable=False)
  4. gender = Column(Integer, default=1, comment="1为男,0为女")
  5. # 在此处进行定义__str__()方法,直接返回对应的值
  6. def __str__(self):
  7. return f"姓名:{self.name}, 性别:{self.gender}"

实例化sessionmaker类,并绑定引擎

Session = sessionmaker(bind=engine)

由于sessionmaker类中有call()魔法方法,因此可以将其类作为方法进行调用

session = Session()

和上述相同的方法进行取值

dates = session.query(Sheet).all() for date in dates: print(date)

  1. 通过给模型增加__str__()给出所需要的返回值
  2. ```python
  3. class Sheet(Base):
  4. __tablename__ = "sheet3"
  5. id = Column(Integer, primary_key=True, autoincrement=True)
  6. name = Column(String(10), nullable=False)
  7. gender = Column(Integer, default=1, comment="1为男,0为女")
  8. # 在此处进行定义__str__()方法,直接返回对应的值
  9. def __str__(self):
  10. return f"姓名:{self.name}, 性别:{self.gender}"

2、条件查询(filter条件查询和get方法)

filter:
date = session.query(Sheet).filter(Sheet.字段名 == 条件).all()
注意点:使用==号,并且是要模型名.字段名
小列子,找出所有女性

  1. from sqlalchemy import create_engine
  2. from sqlalchemy import Column, Integer, String
  3. from sqlalchemy.ext.declarative import declarative_base
  4. from sqlalchemy.orm.session import sessionmaker
  5. # 定义引擎
  6. HOSTNAME = "127.0.0.1"
  7. DATABASE = "my_sql"
  8. PORT = 3306
  9. USERNAME = "root"
  10. PASSWORD = "147258"
  11. MS_DP = f"mysql+mysqlconnector://{USERNAME}:{PASSWORD}@{HOSTNAME}:{PORT}/{DATABASE}?charset=utf8"
  12. engine = create_engine(MS_DP)
  13. Base = declarative_base(engine)
  14. class Sheet(Base):
  15. __tablename__ = "sheet3"
  16. id = Column(Integer, primary_key=True, autoincrement=True)
  17. name = Column(String(10), nullable=False)
  18. gender = Column(Integer, default=1, comment="1为男,0为女")
  19. # 在此处进行定义__str__()方法,直接返回对应的值
  20. def __str__(self):
  21. return f"姓名:{self.name}, 性别:{self.gender}"
  22. # 实例化sessionmaker类,并绑定引擎
  23. Session = sessionmaker(bind=engine)
  24. # 由于sessionmaker类中有__call__()魔法方法,因此可以将其类作为方法进行调用
  25. session = Session()
  26. dates = session.query(Sheet).filter(Sheet.gender == 1).all()
  27. for date in dates:
  28. print(date)

filter_by:
date = session.query(Sheet).filter_by(字段名 = 条件).all()
注意点:使用=号,并且只要字段名
小列子,找出所有女性

  1. dates = session.query(Sheet).filter_by(gender = 1).all()
  2. for date in dates:
  3. print(date)

filter(),filter_by()可以进行多条件输入,以filter_by()为例
小例子:找到性别为男,姓名为”龚祝俊”的数据

  1. dates = session.query(Sheet).filter_by(gender = 1, name = "龚祝俊").all()
  2. for date in dates:
  3. print(date)

get方法
date = session.query(Sheet).get(第几条数据)
注意点:如果输入的数字,超过数据数量则会返回None
小例子,获取第3条数据

  1. date = session.query(Sheet).get(3)
  2. print(date)

first()方法
获取第一条数据

  1. date = session.query(Sheet).first()
  2. print(date)

3、修改数据以及数据回滚(rollback)

先查询后修改(相当于给对象中的属性,进行重新赋值),修改之后不要忘记进行提交(session.commint())
小例子:将第三条数据的姓名修改为”张三”

  1. # 实例化sessionmaker类,并绑定引擎
  2. Session = sessionmaker(bind=engine)
  3. # 由于sessionmaker类中有__call__()魔法方法,因此可以将其类作为方法进行调用
  4. session = Session()
  5. date = session.query(Sheet).get(3)
  6. date.name = "张三"
  7. session.commint()

数据回滚
要在数据提交(session.commint())之前,一旦提交就无法进行回滚(session.rollback())

  1. # 实例化sessionmaker类,并绑定引擎
  2. Session = sessionmaker(bind=engine)
  3. # 由于sessionmaker类中有__call__()魔法方法,因此可以将其类作为方法进行调用
  4. session = Session()
  5. date = session.query(Sheet).get(3)
  6. date.name = "张三"
  7. # 数据回滚
  8. session.rollback()
  9. session.commint()

一般配合try…except…使用,如果数据没有异常,就提交否则回滚

4、删除数据(delete())

一般不进行删除,而是添加一列新的字段(如定义is_delete)来标记删除,如1表示未删除,0表示删除
先查询后删除,提交(session.commit())后生效
小例子:将第三条数据进行删除

  1. # 实例化sessionmaker类,并绑定引擎
  2. Session = sessionmaker(bind=engine)
  3. # 由于sessionmaker类中有__call__()魔法方法,因此可以将其类作为方法进行调用
  4. session = Session()
  5. date = session.query(Sheet).get(3)
  6. session.delete(date)
  7. session.commit()