V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
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
qazwsxkevin
V2EX  ›  Python

请教 sqlalchemy,如何根据映射类定义去创建表?

  •  
  •   qazwsxkevin · 2020-06-13 23:16:33 +08:00 · 1171 次点击
    这是一个创建于 1415 天前的主题,其中的信息可能已经有所发展或是发生改变。

    如:

    Base = declarative_base()
    engine = create_engine("mysql+pymysql://root:[email protected]:3306/MTData?charset=utf8", echo=False)
    Session = sessionmaker(bind=engine)        
    session = Session()
    metadata = MetaData(engine)
    
    class tbl_mtLive(Base):
        __tablename__ = 'mtLive'
    
        id = Column(INTEGER(64), primary_key=True)
        timeline = Column(SMALLINT())
        mtuptime = Column(SMALLINT())
        mttext = Column(String(500))
        mtstatus = Column(String(25))
        Strtime = Column(String(25))
        fixStrtime = Column(DateTime)
        mtid = Column(String(10))
        UpdateTime = Column(DateTime)
        SQLTAG = Column(String(20))
    
    
    

    MTData 库里面,除了 mtLive 还有 N 张表,
    有些已经像 class tbl_mtLive(Base)这样“映射类定义”了,
    有些则没有,

    请教大家第一个问题是:如果 mtLive 这个表并没有建立,上面这种 ORM 的前提下,如何以 class tbl_mtLive 去创建表? sqlalchemy 的文档看得眼都花了。。。-_-

    第二个问题是: 想法是打算把库里面的全部表做一个历遍,
    去执行

    for i in #这个表集合如何获取?#
        session.execute(f"update {i} set `{k}`='{v[0]}' where mtid = '{i.get('mtid')}' AND timeline = '{i.get('timeline')}'")
        # 更新 UpdateTime
        session.execute(f"update {i} set `UpdateTime`='{ProcFixTime()}' where mtid = '{i.get('mtid')}' AND timeline = '{i.get('timeline')}'")
    

    看了网上的例子,文档和网上有很多的例子是用.cursors,.execute()执行了 SQL 语句,用.fetchall()的方获取到表名,然后开始 do something 的,

    请问 ORM 方式是否有方法可以实现?如何做?

    尽管在草拟这个帖子的前 1 小时,已经实现
    tables = Base.metadata.tables
    print(tables)
    获得了表名,似乎觉得这样操作不是好办法。。。

    2 条回复    2020-06-14 23:50:56 +08:00
    gjquoiai
        1
    gjquoiai  
       2020-06-14 22:13:43 +08:00
    其实没太看懂。。第一个问题应该是 Base.metadata.create_all()?第二个问题可能可以用 automap
    myCupOfTea
        2
    myCupOfTea  
       2020-06-14 23:50:56 +08:00
    第二个问题直接用 automap 啊
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   2262 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 32ms · UTC 16:11 · PVG 00:11 · LAX 09:11 · JFK 12:11
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.