参考:https://stackoverflow.com/questions/50456547/how-to-set-on-conflict sqlalchemy 官方文档:https://docs.sqlalchemy.org/en/20/dialects/sqlite.html sqlite 官网文档
冲突类型
- 
sqlite_on_conflict_not_null - 
sqlite_on_conflict_primary_key - 
sqlite_on_conflict_unique 
可选操作
- 
ROLLBACK - 
ABORT - 
FAIL - 
IGNORE - 
REPLACE 
语法
- 
联合约束
UniqueConstraint("id", "data", sqlite_on_conflict="IGNORE") - 
独立约束
 
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
)