当前位置: 首页 > 面试题库 >

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

秋建义
2023-03-14
问题内容

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

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

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

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


问题答案:

我们被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

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



 类似资料:
  • 问题内容: 我们需要创建SQLAlchemy类来访问多个外部数据源,这些数据源会随着时间的推移而增加。我们为核心ORM模型使用了声明式基础,并且我知道我们可以使用autoload = True手动指定新的ORM类,以自动生成映射。 问题是我们需要能够采用以下方式动态生成它们: 并动态地将其转换为如下所示: 我们不希望类的持久时间长于打开连接,执行查询然后关闭连接所需的时间。因此,理想情况下,我们可

  • 问题内容: 我正在开发Web应用程序。我们在项目中将Hibernate用作ORM。实际上,我们的应用程序根据用户选择动态创建一些表。用户可以选择表名,列名,然后可以从csv文件导入数据。所以我的问题是:如何用Hibernate和Java对象映射此动态创建的表? 问题答案: 它可以动态完成,但有些混乱: 在建立SessionFactory之前,您需要动态更改Hibernate的Configurati

  • 问题内容: 我可以这样创建一个临时表: 但是新表不可读,因为它说它没有主键。 是exisitingtable的主键,因此我希望它在temp表中得到相同的处理。 但是,无论如何,我宁愿找到某种ORM方式来执行此操作。鉴于: 如何在不执行100000命令的情况下填充一些选定的内容?还是有一种方法可以通过类似于上面的普通SQL版本的查询来创建表? 问题答案: 它不完全是ORM,但为了最初创建表,我将克隆

  • 问题内容: 我正在尝试集成PostgreSQL和SQLAlchemy,但是SQLAlchemy.create_all()并未从我的模型中创建任何表。 我的代码: 但是我得到这个错误: 我怎样才能解决这个问题? 问题答案: 您应该在调用之前放置模型类,如下所示: 如果您的模型是在单独的模块中声明的,请在调用之前将其导入。 说,模型在名为的文件中, 重要说明: 在初始化对象之后导入模型很重要,因为在_

  • 问题内容: 我在mysql上创建数据库。首先创建主体表,每个表平均有30列。日志表的标准是引用表的pk加上每列*2。像这样: 参考表: 日志表: 现在,我想要创建一个过程,在该过程中,我将表名作为参数传递,并生成表日志查询并执行它。 做这个的最好方式是什么? 问题答案: 为了使一个字符串代表一个表(或数据库)名称,您将需要用变量连接查询字符串,并在存储过程中准备/执行一条语句。这是一个基本示例。

  • 身份证姓名地点1 abc Hyd 2 banu chen 3 jai bang 4 hari Hyd 5 nani Hyd 6 banti bang 7 kali chen 在此文本文件加载的基础上,我们需要动态创建位置表并加载相关数据。由于一段时间文本文件中可能有更多的位置,我们需要动态创建表并加载它。请告诉我如何使用SSIS实现此任务。我们需要foreach循环容器,但不知道如何实现此任务。请