赞
踩
`MetaData` 对象和模型类在使用 SQLAlchemy 与 数据库进行交互时,有一些不同之处。
使用 `MetaData` 对象,可直接操作数据库表结构。它允许您定义表名、列名、数据类型等。然后,使用 `create_all` 方法创建这些表。这种方法更适合在需要完全控制数据库表结构的情况下,例如在创建数据库时进行初始设置。
MetaData
对象是 SQLAlchemy 中的一个核心组件,它用于表示数据库表结构。使用 MetaData
对象,您可以直接操作数据库表结构,而不需要定义模型类。这种方法更适合在需要完全控制数据库表结构的情况下,例如在创建数据库时进行初始设置。
MetaData
对象的主要特点和应用场景:
Table
类创建表,并将其与 MetaData
对象关联。create_all
方法创建表,将 MetaData
对象和引擎对象作为参数传递。MetaData
对象进行数据库操作。 - from sqlalchemy import create_engine, MetaData, Table, Column, Integer, String, DateTime
- from sqlalchemy.sql import select
- import datetime
-
- metadata = MetaData()
-
- table_users = Table('users', metadata,
- Column('id', Integer, primary_key=True), # 添加主键属性
- Column('name', String),
- Column('age', Integer),
- Column('created_at', DateTime)
- )
-
- engine = create_engine('sqlite:///MetaDatausers.db')
-
-
- metadata.create_all(engine)
-
- # 插入数据
- insert_stmt = table_users.insert().values(
- name='Alice', age=30, created_at=datetime.datetime.now()
- )
- with engine.connect() as connection:
- connection.execute(insert_stmt)
- insert_stmt = table_users.insert().values(
- name='Bob', age=25, created_at=datetime.datetime.now()
- )
-
- with engine.connect() as connection:
- connection.execute(insert_stmt)
- connection.commit()
-
- insert_stmt = table_users.insert().values(
- name='Charlie', age=35, created_at=datetime.datetime.now()
- )
-
- with engine.connect() as connection:
- connection.execute(insert_stmt)
- connection.commit()
-
- insert_stmt = table_users.insert().values(
- name='David', age=40, created_at=datetime.datetime.now()
- )
-
- with engine.connect() as connection:
- connection.execute(insert_stmt)
- connection.commit()
-
- insert_stmt = table_users.insert().values(
- name='Eve', age=45, created_at=datetime.datetime.now()
- )
-
- with engine.connect() as connection:
- connection.execute(insert_stmt)
- connection.commit()
-
- # 查询数据
- select_stmt = table_users.select()
-
-
- with engine.connect() as connection:
- result = connection.execute(select_stmt)
- for row in result.fetchall():
- print(row)
使用模型类,可以定义类来表示数据库表的结构。
模型类是 SQLAlchemy 中的另一个核心组件,它用于表示数据库表的结构。模型类与数据库表一一对应,每个模型类对应一个表。模型类更适合在需要对数据库表进行复杂查询和操作时,例如在使用 ORM 进行数据操作时。
模型类的主要特点和应用场景:
declarative_base()
函数创建基类,然后继承该基类创建模型类。Column
装饰器定义列名、数据类型等。- from sqlalchemy import create_engine, Column, Integer, String, DateTime
- from sqlalchemy.orm import declarative_base,sessionmaker
-
- Base = declarative_base()
-
- class User(Base):
- __tablename__ = 'users'
-
- id = Column(Integer, primary_key=True)
- name = Column(String)
- age = Column(Integer)
- created_at = Column(DateTime)
-
- engine = create_engine('mssql+pymssql://username:password@server/database?driver=SQL+Server+Native+Client+11.0')
- Base.metadata.create_all(engine)
-
- Session = sessionmaker(bind=engine)
- session = Session()
-
- # 插入数据
- new_user = User(name='Alice', age=30, created_at=datetime.now())
- session.add(new_user)
- session.commit()
-
- # 删除数据
- session.query(User).filter(User.id == 1).delete()
- session.commit()
-
- # 更新数据
- user_to_update = session.query(User).filter(User.id == 1).one()
- user_to_update.name = 'Bob'
- session.commit()
-
- # 查询数据
- users = session.query(User).filter(User.id == 1).all()
- for user in users:
- print(user)
-
- session.close()
- from sqlalchemy import create_engine, Column, Integer, String
- from sqlalchemy.orm import declarative_base,sessionmaker
-
- # 设置数据库连接字符串
- conn_str = 'sqlite:///examplesqlalchemy.db'
-
- # 创建数据库引擎
- engine = create_engine(conn_str)
-
- # 创建基类
- Base = declarative_base()
-
-
- # 定义用户表
- class User(Base):
- __tablename__ = 'users'
- id = Column(Integer, primary_key=True)
- username = Column(String(50), unique=True, nullable=False)
- email = Column(String(100), nullable=False)
-
- # 创建数据库表
- Base.metadata.create_all(engine)
-
- # 创建会话
- Session = sessionmaker(bind=engine)
- session = Session()
-
- # 插入数据
- new_user = User(username='john_doe8', email='john@example.com')
- session.add(new_user)
- session.commit()
-
- # 插入数据
- new_user2 = User(username='john_doe9', email='john2@example.com')
- session.add(new_user2)
- session.commit()
-
-
- # 查询数据
- users = session.query(User).all()
- for user in users:
- print(user.username, user.email)
-
- # 更新数据
- user = session.query(User).filter_by(username='john_doe8').first()
- user.email = 'john_updated@example.com'
- session.commit()
-
- # 删除数据
- user = session.query(User).filter_by(username='john_doe6').first()
- session.delete(user)
- session.commit()
-
- # 关闭会话
- session.close()
总之,`MetaData` 对象和模型类在使用 SQLAlchemy 与 数据库进行交互时,有一些不同之处。`MetaData` 对象更适合在需要完全控制数据库表结构的情况下,而模型类更适合在需要对数据库表进行复杂查询和操作时。在实际应用中,您可以根据需要选择使用 `MetaData` 对象或模型类。
请注意,在运行此示例程序之前,需要确保已安装 SQLAlchemy 和 Pyodbc /create_engine('mssql+pymssql,并且已配置正确的数据库连接信息。
SQLAlchemy 1.4 库中的主要类及其重要方法:
Engine:
Session:
Table:
MetaData:
Column:
查询对象:
其他类:
通过了解这些类及其方法,您可以使用 SQLAlchemy 1.4 有效地执行数据库操作。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。