python – SQLAlchemy – 创建表模板
发布时间:2020-12-20 13:24:01 所属栏目:Python 来源:网络整理
导读:我刚开始使用SQLAlchemy而且我一直在想……我的模型中会有很多表格.我希望我的模型中的每个表都有自己的文件. 我目前正在使用以下代码: from sqlalchemy import MetaDatafrom sqlalchemy.orm import scoped_session,sessionmakerfrom sqlalchemy.ext.declar
我刚开始使用SQLAlchemy而且我一直在想……我的模型中会有很多表格.我希望我的模型中的每个表都有自己的文件.
我目前正在使用以下代码: from sqlalchemy import MetaData from sqlalchemy.orm import scoped_session,sessionmaker from sqlalchemy.ext.declarative import declarative_base from sqlalchemy.dialects import postgresql import sqlalchemy as sa __all__ = ['Session','engine','metadata'] # SQLAlchemy database engine. Updated by model.init_model() engine = None # SQLAlchemy session manager. Updated by model.init_model() Session = scoped_session(sessionmaker()) # Global metadata. If you have multiple databases with overlapping table # names,you'll need a metadata for each database metadata = MetaData() # declarative table definitions Base = declarative_base() Base.metadata = metadata schema = 'srbam_dev' 在meta.py中 在_init_.py之后 """The application's model objects""" import sqlalchemy as sa from sqlalchemy import orm from models import meta from models.filers import Filer from models.vfilers import Vfiler from models.filer_options import FilerOption def init_models(engine): """Call me before using any of the tables or classes in the model""" ## Reflected tables must be defined and mapped here #global reflected_table #reflected_table = sa.Table("Reflected",meta.metadata,autoload=True,# autoload_with=engine) #orm.mapper(Reflected,reflected_table) # meta.engine = sa.create_engine(engine) meta.Session.configure(bind=meta.engine) class Basic_Table(object): id = sa.Column( postgresql.UUID(),nullable=False,primary_key=True ) created = sa.Column( sa.types.DateTime(True),nullable=False ) modified = sa.Column( sa.types.DateTime(True),nullable=False ) 然后在我的所有模型中关注 from models.meta import Base from models.meta import Basic_Table from models.meta import schema import sqlalchemy as sa from sqlalchemy.dialects import postgresql class Filer(Base,Basic_Table): 这项工作正常,只要我没有开始在表上使用一些外键,一旦我使用外键说 sqlalchemy.exc.NoReferencedTableError: Foreign key associated with column 't_vfilers.filer_id' could not find table 't_filers' with which to generate a foreign key to target column 'id' 我试图直接在Filer类中定义id键(并从声明中删除Basic_Table),但这并没有解决问题. 我创建数据库的代码如下所示 config = ConfigParser.RawConfigParser() config.read('conf/core.conf') db_url = URL( 'postgresql+psycopg2',config.get('database','username'),'password'),'host'),'port'),'dbname') ) init_models(db_url) meta.Base.metadata.drop_all(bind=meta.engine) meta.Base.metadata.create_all(bind=meta.engine) 有谁知道如何解决这个问题? 解决方法
Marek,做一件事尝试定义外键以及模式名称,即’test.t_vfilers.filer_id'(这里’test’是模式名称),这将解决问题.
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |