请教关于 sqlalchemy 的使用,表结构定义的两个问题。。

2019-05-28 14:16:17 +08:00
 qazwsxkevin
           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 的类定义表达呢?

1078 次点击
所在节点    Python
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/

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/568384

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX