SQLAlchemy系列之数据表的创建和删除

小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。

本文已参与「掘力星计划」,赢取创作大礼包,挑战创作激励金。

以本地MySQL的test数据库为例,先来看一下test数据库的表情形:

QQ拼音截图未命名3.png

现在使用SQLAlchemy创建一个worker的表,代码如下:

1.数据表的创建

1 .1创建方法一

from sqlalchemy import create_engine
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import Column, Integer, String, DateTime
​
​
Base = declarative_base()
engine = create_engine('mysql+pymysql://root:123456@localhost:3306/test?charset=utf8', echo=True)
​
​
class Worker(Base):
    # 表名
    __tablename__ = 'worker'
    id = Column(Integer, primary_key=True)
    name = Column(String(50), unique=True)
    age = Column(Integer)
    birth = Column(DateTime)
    part_name = Column(String(50))
​
​
# 创建数据表
Base.metadata.create_all(engine)
复制代码

我们再来看看数据库,是否真的创建成功了

QQ拼音截图未命名4.png 我们对比前后两次数据库的查询信息,确实新生成了一张名叫worker的表。

该方法引入declarative_base模块,生成其对象Base,再创建一个类Worker。一般情况下,数据表名和类名是一致的。tablename用于定义数据表的名称,可以忽略,忽略时默认定义类名为数据表名。然后创建字段id、name、age、birth、part_name,最后使用Base.metadata.create_all(engine)在数据库中创建对应的数据表

1.2 创建方法二

Base.metadata.create_all(engine)
​
from sqlalchemy import create_engine
from sqlalchemy.dialects.mysql import INTEGER,CHAR
from sqlalchemy import Column, MetaData, ForeignKey, Table
​
​
​
meta = MetaData()
engine = create_engine('mysql+pymysql://root:123456@localhost:3306/test?charset=utf8', echo=True)
​
part = Table("part", meta,
             Column('id', INTEGER, primary_key=True),
             Column('part_name', CHAR(50), ForeignKey(Worker.name)),
             Column('part_no', INTEGER)
             )
​
part.create(bind=engine)
复制代码

再来看看数据库的情形

QQ拼音截图未命名5.png

我们对比前后两次数据库的查询信息,确实新生成了一张名叫part的表。该方法与前面介绍的创建数据表的方法差别很大,代码偏向于SQL创建数据表的语法,两者引入的模块不一样,这也导致了创建语法的不同。

在数据表存在时,再去创建数据表方法一不会报错,二方法二会报错。

2.数据表的删除

删除数据表的时候,一定要先删除设有外键的数据表,也就是先删除part,然后才能删除worker,两者之间涉及外键,这是在数据库中删除数据表的规则。对于两种不同方式创建的数据表,删除语句也不一样。

第一种方式创建的数据库表

Base.metadata.drop_all(engine)
复制代码

第二种方式创建的数据库表

part.drop(bind=engine)
复制代码

删除前的数据库情形:

image-20210822214121534.png

删除数据库表:

part.drop(bind=engine)
Base.metadata.drop_all(engine)
复制代码

来看看数据库的结果:

image-20210822214246499.png

注: 无论数据库表是否已经创建,在使用SQLAlchemy时都必须要对数据表的属性、字段进行类定义。也就是说,无论通过什么方式创建数据表,在使用SQLAlchemy时,第一步是创建数据库连接,第二步是定义类来映射数据表,类的属性映射数据表的字段。

猜你喜欢

转载自juejin.im/post/7014371642545537037