Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/359.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 添加onupdate=";“级联”;使用sqlalchemy复制到postgres中的现有列_Python_Postgresql_Sqlalchemy - Fatal编程技术网

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;
要自动化架构管理,请签出项目