sqlalchemy sqlite conflict 键冲突

创建日期: 2024-12-19 14:44 | 作者: 风波 | 浏览次数: 21 | 分类: SQLAlchemy

参考:https://stackoverflow.com/questions/50456547/how-to-set-on-conflict sqlalchemy 官方文档:https://docs.sqlalchemy.org/en/20/dialects/sqlite.html sqlite 官网文档

冲突类型

可选操作

语法

Column(
        "data", Integer, unique=True, sqlite_on_conflict_unique="IGNORE"
    )
Column(
        "id",
        Integer,
        primary_key=True,
        sqlite_on_conflict_primary_key="FAIL",
    )

方法一

tbl1 = sa.Table(
    't1',
    metadata,
    sa.Column('id', sa.Integer, primary_key=True),
    sa.Column(
        'name', sa.String, unique=True, sqlite_on_conflict_unique='REPLACE'
    ),
    sa.Column('colour', sa.String),
)

生成的 SQL 语句

CREATE TABLE t1 (
        id INTEGER NOT NULL, 
        name VARCHAR, 
        colour VARCHAR, 
        PRIMARY KEY (id), 
        UNIQUE (name) ON CONFLICT REPLACE
)

方法二

tbl2 = sa.Table(
    't2',
    metadata,
    sa.Column('id', sa.Integer, primary_key=True),
    sa.Column('name', sa.String),
    sa.Column('colour', sa.String),
    sa.Column('size', sa.Integer),
    sa.UniqueConstraint('name', 'colour', sqlite_on_conflict='IGNORE')
)

生成的 SQL 语句

CREATE TABLE t2 (
        id INTEGER NOT NULL, 
        name VARCHAR, 
        colour VARCHAR, 
        size INTEGER, 
        PRIMARY KEY (id), 
        UNIQUE (name, colour) ON CONFLICT IGNORE
)
21 浏览
15 爬虫
0 评论