SQLite on_conflict 在使用 ORM 时不起作用
import time from sqlalchemy import Column, Integer, String, ForeignKey, Float, Boolean, PrimaryKeyConstraint from sqlalchemy import create_engine from sqlalchemy.ext.declarative import declarative_base from sqlalchemy.orm import sessionmaker from sqlalchemy.schema import CreateTable Base = declarative_base()
class SearchPolygon(Base): tablename = 'search_polygons'
name = Column(String, primary_key=True)
centroid_row = Column(Float, nullable=False)
centroid_column = Column(Float, nullable=False)
centroid_zoom = Column(Integer, nullable=False)
inner_coords_calculated = Column(Boolean, nullable=False, default=False)class SlippyTile(Base): tablename = 'slippy_tiles'
row = Column(Integer, nullable=False, primary_key=True, on_conflict_primary_key='IGNORE')
column = Column(Integer, nullable=False, primary_key=True, on_conflict_primary_key='IGNORE')
zoom = Column(Integer, nullable=False, primary_key=True, on_conflict_primary_key='IGNORE')
centroid_distance = Column(Float)
polygon_name = Column(String, ForeignKey('search_polygons.name'))engine = create_engine('sqlite:///data/solar.db') SlippyTile.table.primary_key = PrimaryKeyConstraint(SlippyTile.row.name, SlippyTile.column.name, SlippyTile.zoom.name, on_conflict_primary_key='IGNORE') from sqlalchemy.schema import CreateTable print(CreateTable(SlippyTile.table).compile(engine)) Base.metadata.create_all(engine) Session = sessionmaker(bind=engine)
内容来源: sqlalchemy/sqlalchemy