我有兩個數據庫,我正在使用SQLAlchemy與Python一起使用,數據庫共享表名,因此運行代碼時收到錯誤消息。sqlalchemy具有相同表名稱的多個數據庫不起作用
的錯誤信息是:
sqlalchemy.exc.InvalidRequestError: Table 'wo' is already defined for this MetaData instance. Specify 'extend_existing=True' to redefine options and columns on an existing Table object.
簡化代碼如下:
from sqlalchemy import create_engine, Column, Integer, String, DateTime, ForeignKey
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker, relationship, backref
from mysql.connector.connection import MySQLConnection
Base = declarative_base()
def get_characterset_info(self):
return self.get_charset()
MySQLConnection.get_characterset_info = MySQLConnection.get_charset
mysqlengine = create_engine('mysql+mysqlconnector://......../mp2', echo=True)
MYSQLSession = sessionmaker(bind=mysqlengine)
mysqlsession= MYSQLSession()
MP2engine = create_engine('mssql+pyodbc://......../mp2', echo=True)
MP2Session = sessionmaker(bind=MP2engine)
mp2session= MP2Session()
class MYSQLWo(Base):
__tablename__= 'wo'
wonum = Column(String, primary_key=True)
taskdesc = Column(String)
comments = relationship("MYSQLWocom", order_by="MYSQLWocom.wonum", backref='wo')
class MYSQLWocom (Base):
__tablename__='wocom'
wonum = Column(String, ForeignKey('wo.wonum'), primary_key=True)
comments = Column(String, primary_key=True)
class MP2Wo(Base):
__tablename__= 'wo'
wonum = Column(String, primary_key=True)
taskdesc = Column(String)
comments = relationship("MP2Wocom", order_by="MP2Wocom.wonum", backref='wo')
class MP2Wocom (Base):
__tablename__='woc'
wonum = Column(String, ForeignKey('wo.wonum'), primary_key=True)
location = Column(String)
sublocation1 = Column(String)
texts = Column(String, primary_key=True)
我該如何處理與具有相同的表結構的數據庫?我猜它與MetaData實例有關,但是當談論類聲明和古典用法的差異時,SQLAlchemy文檔變得有點混亂..
我刪除隨機')'在源代碼中我認爲是一個錯字,如果它不是可以恢復。 – GWW
我有答案: 由於實際上表格有稍微不同的結構,解決方案是簡單地創建一個單獨的聲明基礎。如果表格確實具有相同的結構,我不需要創建一個單獨的類。 'Base = declarative_base()' 'Base2 = declarative_base()' – dangel