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 · 2019-05-28 14:16:17 +08:00 · 1074 次点击
    这是一个创建于 1806 天前的主题,其中的信息可能已经有所发展或是发生改变。
               class Person(Base):
                __tablename__ = "person"
                id = Column(Integer, primary_key=True, autoincrement=True)
                name = Column(String(10), nullable=False)
                age = Column(Integer, nullable=False)
    
                def __repr__(self):
                    return "id:%s,name:%s,age:%s" %(self.id,self.name,self.age)
    
            person = Person(name="jack",age=20)
            session.add(person)
            session.commit()
    

    1、这句:“ name = Column(String(10), nullable=False)”,官网对 Column 这个函数的说明(我 E 文理解不好),如果 Person 类不用来建表(其实表在库里面,以前就有的,目前操作要达到的目的只是 insert 或者 update ),似乎只用以下的方式就可以了,不用写 String 的长度,不写默认 null 是否允许也是可以的,理解对不对? 其实我也做了个测试,内容是可以写进表的(除了“ id = Column(Integer, primary_key=True, autoincrement=True"这句,必须声明"id"要自增长的参数,否则写入失败)

    name = Column(String)
    

    我想问的问题是,在 insert 或者 update 的时候,对于字段数据的类型,长度不说明,sqlalchemy 会怎么样的情况?注不注明比较好?如果 sqlalchemy 的表结构类里,写错了,又会怎么样呢(我自己动手的实验里,跟真实表不一致数据类型,也能写入)

    2、第二个问题是承接第一种情况,(就一个)库里已经有过百张表(不要问为什么,我也懵逼),表的字段内容都几乎在 20 个 Column 以上,在使用 sqlalchemy 的时候,几乎要对一半以上的表做操作,那么在定义表结构类的时候,逐一明细写清楚?
    这里有个问题,有什么便捷方法,把 mysqk 表结构轻松转成 sqlalchemy 的类定义表达呢?

    1 条回复    2019-05-29 09:38:03 +08:00
    frostming
        1
    frostming  
       2019-05-29 09:38:03 +08:00
    不写 model 的方式,使用 ORM 操作已存在的表,sqlalchemy 提供自动 map 功能 https://docs.sqlalchemy.org/en/13/orm/extensions/automap.html

    从表结构生成 model 代码的方式: https://pypi.org/project/sqlacodegen/
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   2902 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 15:40 · PVG 23:40 · LAX 08:40 · JFK 11:40
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.