SQLAlchemy操作数据库,对数据进行CRUD操作

 

 数据库是一个网站的基础。

比如MySQL、MongoDB、SQLite、PostgreSQL等,这里我们以 MySQL为例进行讲解。

SQLAlchemy是一个ORM框架,可用于在Python应用程序中执行SQL操作。

我们会以 MySQL+ SQLAlchemy 组合进行讲解。

在操作数据库操作之前,先确保你已经安装了以下两个插件:

pip install pymysql
pip install SQLALchemy

 下面是一些常见的SQLAlchemy操作:

  • 创建数据库连接:首先,需要创建一个数据库引擎来连接到数据库。可以使用create_engine()函数来创建引擎。例如,连接到SQLite数据库可以使用以下代码:
from sqlalchemy import create_engine

engine = create_engine('sqlite:///mydatabase.db')
  • 定义数据模型:在SQLAlchemy中,使用ORM(对象关系映射)来表示数据库表和数据模型。可以使用declarative_base()函数创建一个基类。然后,定义一个类来表示数据库表,并使用类属性来定义表的列。例如:
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import Column, Integer, String

Base = declarative_base()

class User(Base):
    __tablename__ = 'users'
    
    id = Column(Integer, primary_key=True)
    name = Column(String)
    email = Column(String)
  • 创建表:使用定义的数据模型,可以使用Base.metadata.create_all()方法来创建数据库中的表。例如:
Base.metadata.create_all(engine)
  • 插入数据:可以使用Session对象来插入数据。首先,需要创建一个会话对象来管理数据库事务。然后,可以使用add()方法向会话中添加数据。最后,使用commit()方法提交事务。例如:
from sqlalchemy.orm import sessionmaker

Session = sessionmaker(bind=engine)
session = Session()

new_user = User(name='John Doe', email='john@example.com')

session.add(new_user)
session.commit()
  • 查询数据:可以使用Session对象进行查询。可以使用query()方法返回一个查询对象,然后使用all()方法来获取所有的结果,或者使用first()方法来获取第一个结果。例如:
users = session.query(User).all()

for user in users:
    print(user.name, user.email)

这只是SQLAlchemy的一部分功能。SQLAlchemy还支持更多高级功能,如更新数据、删除数据和执行复杂的查询等。

代码实现 

from sqlalchemy import create_engine
from sqlalchemy import text

# 数据库的变量
HOST = '127.0.0.1'
PORT = 3306
DATA_BASE = 'itbz'
USER='root'
PWD='123456'
# DB_URL = f'数据库的名+驱动名://{USER}:{PWD}@{HOST}:{PORT}/{DATA_BASE}'
DB_URL = f'mysql+pymysql://{USER}:{PWD}@{HOST}:{PORT}/{DATA_BASE}'
engine = create_engine(DB_URL)

# 执行一个SQL
sql ='select 1;'
conn = engine.connect()
rs = conn.execute(text(sql))
print(rs.fetchone())

执行结果:

构建 session 对象
所有和数据库的 ORM 操作都必须通过一个叫做 session 的会话对象 来实现,通过以下代码来获取会话对象

代码实现

# SQLAlchemy对数据的CRUD
#SQLAlchemy模型映射表结构.
from sqlalchemy import create_engine,Column,Integer,String
from sqlalchemy.orm import declarative_base,sessionmaker

# 数据库的变量
HOST = '127.0.0.1'
PORT = 3306
DATA_BASE = 'itbz'
USER = 'root'
PWD = '123456'
DB_URL = f'mysql+pymysql://{USER}:{PWD}@{HOST}:{PORT}/{DATA_BASE}'

# 创建引擎
engine = create_engine(DB_URL)
# 创建一个基类
Base = declarative_base()

class Person(Base):
    __tablename__='t_person'
    id = Column(Integer,primary_key=True,autoincrement=True)
    name = Column(String(32))
    age = Column(Integer)
    country = Column(String(32))

# 创建session对象来操作数据
Session = sessionmaker(engine)

# 添加一条数据
def create_data_one():
    with Session() as session:
        p1=Person(name='sxt',age=6,country='北京')
        session.add(p1)
        session.commit()

# 添加多条数据
def create_data_many():
    with Session() as session:
        p2=Person(name='孔明',age=19,country='北京')
        p3=Person(name='周瑜',age=18,country='上海')
        session.add_all([p2,p3])
        session.commit()
        
# 查询全部数据
def query_data_all():
    with Session() as session:
        all_person = session.query(Person).all()
        for p in all_person:
            print(f'{p.id}: {p.name} {p.age} {p.country}')

# 查询第一条数据
def query_data_first():
    with Session() as session:
        p = session.query(Person).first()
        print(f'{p.id}: {p.name} {p.age} {p.country}')

# 根据参数查询数据
def query_data_by_params():
    with Session() as session:
        # 查询 如果有一条用first ,多条为all
        # p = session.query(Person).filter_by(name='周瑜').first()
        p = session.query(Person).filter(Person.name=='周瑜').first()
        print(f'{p.id}: {p.name} {p.age} {p.country}')

def update_data():
    with Session() as session:
        p = session.query(Person).filter(Person.name=='周瑜').first()
        p.age = 28
        # 提交事务
        session.commit()
        
# 删除数据
def delete_data():
    with  Session() as session:
        p = session.query(Person).filter(Person.name=='周瑜').first()
        session.delete(p)
        session.commit()

if __name__=="__main__":
    # 删除
    delete_data()
    # 查询
    query_data_all()

添加单条数据

 添加多条数据 

 查询全部数据

查询第一条数据

根据参数查询数据

第一种方式:

 第二种方式:

 更新数据

 删除数据

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值