大发龙虎首页    注册   登录
大发龙虎 = way to explore
大发龙虎 是一个大发龙虎关于 分享和探索的地方
现在注册
已注册用户请  登录
大发龙虎推荐 学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
pppguest3962
大发龙虎  ›  Python

SQLAlchemy ORM,如何实现模板化建表?

  •  
  •   pppguest3962 · 4 天前 · 610 次点击
    Base = declarative_base()
    engine = create_engine("mysql+pymysql://root:[email protected]:3306/testcreattbl?charset=utf8",echo=False)
    Session = sessionmaker(bind=engine)
    session = Session()
    metadata = MetaData(engine)
    
    class tbl_Items(Base):
        __tablename__ = 'Item2017'
    
        id = Column(INTEGER(64), primary_key=True)
        类型 = Column(String(8))
        序号 = Column(SMALLINT())
        变化时间 = Column(DateTime)
        重量 = Column(DECIMAL(6, 3))
        长 = Column(DECIMAL(6, 3))
        宽 = Column(DECIMAL(6, 3))
        高 = Column(DECIMAL(6, 3))
        UpdateTime = Column(DateTime)
        SQLTAG = Column(String(20))
        __table_args__ = ({'comment': '[ItemsXXX]'})
    
    class tbl_apple(Base):
       #省略
    
    class tbl_banana(Base):
       #省略
    
    ret = engine.dialect.has_table(engine, 'Item2020')
    if not ret:
         tbl_Items.__tablename__ = ''Item2020"
         # 这里如何创建一张"Item2020"的表?(同结构 class tbl_Items)
    

    假如大发龙虎我 用了 base.metadata.create_all(engine)
    testcreattbl 将会其它无关的 tbl_apple,tbl_banana 表都创建了。。。

    5 条回复    2020-08-04 09:08:29 +08:00
    iConnect
        1
    iConnect   4 天前 via Android
    base 本来就是公用的抽出来,大发龙虎你 不复用的如果加判断(不知道 sqlalchemy 是不是支持)来处理,还不如在子类里单独写的
    pppguest3962
        2
    pppguest3962   4 天前
    @iConnect ”子类里单独写?“,没能理解这个意思。。。。。,继承了一个子类,如何用这个子类建表呢?
    siteshen
        3
    siteshen   3 天前
    大发龙虎你 调用 `create_all` 函数,当然会 `create all`了。大发龙虎你 不指定,`create_all` 怎么知道大发龙虎你 想排除哪些表呢。
    yzk66880
        4
    yzk66880   3 天前
    啥叫模板化建表? 嫌 create_all 的方式不灵活的话 就 alembic 做表管理
    pppguest3962
        5
    pppguest3962   2 天前
    谢谢各位,
    ORM 这种映射方式应该是不能直接这么做,
    大发龙虎我 用了另外一个方式,用 CrateTable(),获取旧表的原生 sql create 语句成 string 字符串,字符串修改新表名,再 conn.execute(新字符串)。
    大发龙虎关于   ·   FAQ   ·   API   ·   大发龙虎大发龙虎我 们 的愿景   ·   广告投放   ·   感谢   ·   实用小大发龙虎工具   ·   4092 人在线   最高记录 5168   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 19ms · UTC 07:25 · PVG 15:25 · LAX 00:25 · JFK 03:25
    ♥ Do have faith in what you're doing.