Python 添加onupdate=";“级联”;使用sqlalchemy复制到postgres中的现有列
我想在现有表中的Python 添加onupdate=";“级联”;使用sqlalchemy复制到postgres中的现有列,python,postgresql,sqlalchemy,Python,Postgresql,Sqlalchemy,我想在现有表中的ForeignKey对象上添加onupdate=“cascade” 我使用关联对象建立了多对多关系: from sqlalchemy.ext.declarative import declarative_base from sqlalchemy import Column, Integer, String, ForeignKey, create_engine from sqlalchemy.orm import relationship postgres_url = "
ForeignKey
对象上添加onupdate=“cascade”
我使用关联对象建立了多对多关系:
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import Column, Integer, String, ForeignKey, create_engine
from sqlalchemy.orm import relationship
postgres_url = "postgresql:/username:pwd@localhost/myDB"
engine = create_engine(postgres_url)
Base = declarative_base()
Base.metadata.create_all(engine)
class VehicleType(Base):
__tablename__ = 'vehicleTypes'
name = Column(String, primary_key=True)
class SearchTermToVehicleType(Base):
__tablename__ = "searchTermToVehicleType"
searchTermName = Column(String, ForeignKey('searchTerms.name'), primary_key=True)
vehicleTypeName = Column(String, ForeignKey('vehicleTypes.name'), primary_key=True)
class SearchTerm(Base):
__tablename__ = 'searchTerms'
name = Column(String, primary_key=True)
vehicleTypes = relationship("VehicleType", secondary="searchTermToVehicleType")
这已经在生产中,但现在我需要允许用户更改搜索词名称。似乎在关联表中,sqlalchemy会自动执行ondelete=“cascade”
,而不是onupdate=“cascade”
,因此现在我想更改我的模型,将其包含在关联表上的ForeignKey
对象中,这样我就可以简单地更改任何searchTerm
的名称
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import Column, Integer, String, ForeignKey, create_engine
from sqlalchemy.orm import relationship
postgres_url = "postgresql:/username:pwd@localhost/myDB"
engine = create_engine(postgres_url)
Base = declarative_base()
Base.metadata.create_all(engine)
class VehicleType(Base):
__tablename__ = 'vehicleTypes'
name = Column(String, primary_key=True)
class SearchTermToVehicleType(Base):
__tablename__ = "searchTermToVehicleType"
searchTermName = Column(
String,
ForeignKey('searchTerms.name', onupdate="cascade"),
primary_key=True
)
vehicleTypeName = Column(String, ForeignKey('vehicleTypes.name'), primary_key=True)
class SearchTerm(Base):
__tablename__ = 'searchTerms'
name = Column(String, primary_key=True)
vehicleTypes = relationship("VehicleType", secondary="searchTermToVehicleType")
但这不会改变现有的底层postgres表。我可以删除SearchTerm
和SearchTermToVehicleType
表,让sqlalchemy重新构建它们,但我宁愿不必重新填充它们
文档提到这使用了数据库的更新级联功能。如何更改现有的表或列以实现上述结果?或者我必须删除并重建表吗?您需要在postgresql数据库上运行删除约束
和添加约束
sql命令,将现有约束更改为在更新级联时添加约束
ALTER TABLE ...
DROP CONSTRAINT ...,
ADD CONSTRAINT ... FOREIGN KEY ... ON UPDATE CASCADE;
要自动化架构管理,请签出项目