1、添加数据
代码部分:
from sqlalchemy import create_engine
from sqlalchemy import Column, Integer, String
from sqlalchemy.ext.declarative import declarative_base
# 导入sessionmaker类
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)
# 通过ORM模型操控数据库
class Sheet(Base):
__tablename__ = "sheet3"
id = Column(Integer, primary_key=True, autoincrement=True)
name = Column(String(10), nullable=False)
gender = Column(Integer, default=1, comment="1为男,0为女")
# 将模型映射到数据库
Base.metadata.create_all()
# 增加一条数据,实例化数据库并增加属性(必须通过关键字传参)
information = Sheet(name="龚祝俊", gender=0)
# 实例化sessionmaker类,并绑定引擎
Session = sessionmaker(bind=engine)
# 由于sessionmaker类中有__call__()魔法方法,因此可以将其类作为方法进行调用
session = Session()
# 添加数据
session.add(information)
# 将数据提交到数据库中
session.commit()
代码解读:
第一步:导入sessionmaker类
from sqlalchemy.orm.session import sessionmaker
第二步:创建数据,由于一条记录相当于一个对象,也就是通过实例化数据实现
information = Sheet(name="龚祝俊", gender=0)
第三步:实例化sessionmaker类,并添加bind参数,也就是定义的引擎名(特别注意call()方法)
# 实例化sessionmaker类,并绑定引擎
Session = sessionmaker(bind=engine)
# 由于sessionmaker类中有__call__()魔法方法,因此可以将其类作为方法进行调用
session = Session()
第四步:添加数据(.add()与.add_all())
session.add(information)
add方法,一次添加一天数据,如上面的代码所示
add_all方法,可以添加多天数据,但是要以列表的形式进行传递
session.add_all([information1, information2, information3])
第五步:提交数据
session.commit()
2、查询数据
1、查询所有
代码部分:
from sqlalchemy import create_engine
from sqlalchemy import Column, Integer, String
from sqlalchemy.ext.declarative import declarative_base
# 导入sessionmaker类
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)
# 通过ORM模型操控数据库
class Sheet(Base):
__tablename__ = "sheet3"
id = Column(Integer, primary_key=True, autoincrement=True)
name = Column(String(10), nullable=False)
gender = Column(Integer, default=1, comment="1为男,0为女")
# 将模型映射到数据库
Base.metadata.create_all()
# 实例化sessionmaker类,并绑定引擎
Session = sessionmaker(bind=engine)
# 由于sessionmaker类中有__call__()魔法方法,因此可以将其类作为方法进行调用
session = Session()
# 定义dates变量接受数据
dates = session.query(Sheet).all()
# 返回的是一个列表,可以通过for循环配合对应字段进行取值
for date in dates:
print(date.id, date.name, date.gender)
- 通过循环取值
代码解读:
# 实例化sessionmaker类,并绑定引擎
Session = sessionmaker(bind=engine)
# 由于sessionmaker类中有__call__()魔法方法,因此可以将其类作为方法进行调用
session = Session()
这个是一定要写的
dates = session.query(Sheet).all()
调用query(模型名)来获取数据库中的数据
for date in dates:
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):
__tablename__ = "sheet3"
id = Column(Integer, primary_key=True, autoincrement=True)
name = Column(String(10), nullable=False)
gender = Column(Integer, default=1, comment="1为男,0为女")
# 在此处进行定义__str__()方法,直接返回对应的值
def __str__(self):
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)
通过给模型增加__str__()给出所需要的返回值
```python
class Sheet(Base):
__tablename__ = "sheet3"
id = Column(Integer, primary_key=True, autoincrement=True)
name = Column(String(10), nullable=False)
gender = Column(Integer, default=1, comment="1为男,0为女")
# 在此处进行定义__str__()方法,直接返回对应的值
def __str__(self):
return f"姓名:{self.name}, 性别:{self.gender}"
2、条件查询(filter条件查询和get方法)
filter:
date = session.query(Sheet).filter(Sheet.字段名 == 条件).all()
注意点:使用==号,并且是要模型名.字段名
小列子,找出所有女性
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):
__tablename__ = "sheet3"
id = Column(Integer, primary_key=True, autoincrement=True)
name = Column(String(10), nullable=False)
gender = Column(Integer, default=1, comment="1为男,0为女")
# 在此处进行定义__str__()方法,直接返回对应的值
def __str__(self):
return f"姓名:{self.name}, 性别:{self.gender}"
# 实例化sessionmaker类,并绑定引擎
Session = sessionmaker(bind=engine)
# 由于sessionmaker类中有__call__()魔法方法,因此可以将其类作为方法进行调用
session = Session()
dates = session.query(Sheet).filter(Sheet.gender == 1).all()
for date in dates:
print(date)
filter_by:
date = session.query(Sheet).filter_by(字段名 = 条件).all()
注意点:使用=号,并且只要字段名
小列子,找出所有女性
dates = session.query(Sheet).filter_by(gender = 1).all()
for date in dates:
print(date)
filter(),filter_by()可以进行多条件输入,以filter_by()为例
小例子:找到性别为男,姓名为”龚祝俊”的数据
dates = session.query(Sheet).filter_by(gender = 1, name = "龚祝俊").all()
for date in dates:
print(date)
get方法
date = session.query(Sheet).get(第几条数据)
注意点:如果输入的数字,超过数据数量则会返回None
小例子,获取第3条数据
date = session.query(Sheet).get(3)
print(date)
first()方法
获取第一条数据
date = session.query(Sheet).first()
print(date)
3、修改数据以及数据回滚(rollback)
先查询后修改(相当于给对象中的属性,进行重新赋值),修改之后不要忘记进行提交(session.commint())
小例子:将第三条数据的姓名修改为”张三”
# 实例化sessionmaker类,并绑定引擎
Session = sessionmaker(bind=engine)
# 由于sessionmaker类中有__call__()魔法方法,因此可以将其类作为方法进行调用
session = Session()
date = session.query(Sheet).get(3)
date.name = "张三"
session.commint()
数据回滚
要在数据提交(session.commint())之前,一旦提交就无法进行回滚(session.rollback())
# 实例化sessionmaker类,并绑定引擎
Session = sessionmaker(bind=engine)
# 由于sessionmaker类中有__call__()魔法方法,因此可以将其类作为方法进行调用
session = Session()
date = session.query(Sheet).get(3)
date.name = "张三"
# 数据回滚
session.rollback()
session.commint()
一般配合try…except…使用,如果数据没有异常,就提交否则回滚
4、删除数据(delete())
一般不进行删除,而是添加一列新的字段(如定义is_delete)来标记删除,如1表示未删除,0表示删除
先查询后删除,提交(session.commit())后生效
小例子:将第三条数据进行删除
# 实例化sessionmaker类,并绑定引擎
Session = sessionmaker(bind=engine)
# 由于sessionmaker类中有__call__()魔法方法,因此可以将其类作为方法进行调用
session = Session()
date = session.query(Sheet).get(3)
session.delete(date)
session.commit()