加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

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),但这并没有解决问题.

我创建数据库的代码如下所示
????#!的/usr/bin中/Python
????导入ConfigParser
????来自sqlalchemy.engine.url导入URL
????来自型号进口*

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’是模式名称),这将解决问题.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读