SqlAlchemy中的动态表创建和ORM映射

发布于 2021-01-29 15:08:08

我对使用关系数据库还很陌生,所以我更喜欢使用一个好的ORM来简化事情。我花时间评估了不同的Python
ORM,我认为我需要SQLAlchemy。但是,我已经陷入了精神上的死胡同。

我需要创建一个新表,以与在应用程序的播放器表中创建的播放器的每个实例一起使用。我想我知道如何通过元数据更改表的名称然后调用create函数来创建表,但是我不知道如何将其映射到新的动态类。

有人可以给我一些提示,以帮助我摆脱大脑冻结的困扰吗?这有可能吗?

注意:如果我要问的内容更容易实现,我愿意接受Python中的其他ORM。只需向我展示如何:-)

关注者
0
被浏览
76
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    我们被SQLAlchemy宠坏了。
    以下内容直接来自本教程
    非常容易设置和使用。

    由于此操作经常进行,因此
    该文档在2011年8月转为全面声明式

    设置您的环境(我正在使用SQLite内存数据库进行测试):

    >>> from sqlalchemy import create_engine
    >>> engine = create_engine('sqlite:///:memory:', echo=True)
    >>> from sqlalchemy import Table, Column, Integer, String, MetaData
    >>> metadata = MetaData()
    

    定义表:

    >>> players_table = Table('players', metadata,
    ...   Column('id', Integer, primary_key=True),
    ...   Column('name', String),
    ...   Column('score', Integer)
    ... )
    >>> metadata.create_all(engine) # create the table
    

    如果打开了日志记录,您将看到SQLAlchemy为您创建的SQL。

    定义您的班级:

    >>> class Player(object):
    ...     def __init__(self, name, score):
    ...         self.name = name
    ...         self.score = score
    ...
    ...     def __repr__(self):
    ...        return "<Player('%s','%s')>" % (self.name, self.score)
    

    将类映射到您的表:

    >>> from sqlalchemy.orm import mapper
    >>> mapper(Player, players_table) 
    <Mapper at 0x...; Player>
    

    创建一个玩家:

    >>> a_player = Player('monty', 0)
    >>> a_player.name
    'monty'
    >>> a_player.score
    0
    

    就是这样,您现在有了一个玩家表。



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看