数据库是一个网站的基础。
比如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()
添加单条数据
添加多条数据
查询全部数据
查询第一条数据
根据参数查询数据
第一种方式:
第二种方式:
更新数据
删除数据