我在数据库中预先存在表,我想使用自动化模式

但是,为了能够使用此模式,您需要设置主键,如文档中所示(并尝试自己;像这样失败)。

sqlalchemy中是否有任何方法可以将主键设置为已存在的id列? (理想情况下,来自下面显示的Users对象)。

顺便说一句,我正在使用postgresql (vs sqlite 似乎不允许在创建表后设置主要内容 )。


FYI

到目前为止,我已经能够成功访问数据如下:

from sqlalchemy import Table, MetaData
from sqlalchemy.orm import sessionmaker

metadata = MetaData(engine)
Users = Table('users', metadata, autoload=True)  

Session = sessionmaker(bind=engine)
session = Session()
user_q = session.query(Users).filter(Users.c.id==1)

但这给了我一个列表,我需要使用索引访问值。 我想通过user.first_name = "John"通常完成的给定行的属性(列)名称设置值(例如,通过user.first_name = "John"语法)。

#1楼 票数:2

您也可以更改基础表,从长远来看这是正确的做法,但如果users.id的值唯一标识一行, 您可以手动指示SQLAlchemy将其作为主键 明确地部分处理指定类映射

Base = automap_base()

class Users(Base)
    __tablename__ = 'users'
    # Override id column, the type must match. Automap handles the rest.
    id = Column(Integer, primary_key=True)    

# Continue with the automapping. Will fill in the rest.
Base.prepare(engine, reflect=True)

#2楼 票数:1 已采纳

使用原始DDL语句。 如果列id已经是唯一的:

con = sqlalchemy.create_engine(url, client_encoding='utf8')
con.execute('alter table my_table add primary key(id)')

如果id列不唯一,则必须删除它并重新创建:

con.execute('alter table my_table drop id')
con.execute('alter table my_table add id serial primary key')

在Postgres中,以这种方式添加列将自动在后续行中使用连续数字填充列。

  ask by Bentley4 translate from so

未解决问题?本站智能推荐:

1回复

使用 db.create_all 获取flask-sqlalchemy 从模型创建表

我有一个 Docker 设置,带有一个 Flask 应用程序和一个 Postgresql 后端。 我希望能够根据 Flask-SqlAlchemy 中定义的模型在 Postgres 中创建我的所有表。 这目前对我不起作用。 在我的应用程序 __init__.py 中,我使用配置文件创建了我的应用程
1回复

SQL Alchemy使用现有的主键创建新对象

我正在尝试在sqlalchemy中创建新对象,但由于该ID已存在而出现完整性错误。 下面是我的模型。 我正在使用postgreSQL数据库,并且该表已具有条目。 下面是创建新对象的代码。 关于使用SQLalchemy或PostgreSQL创建新对象,我应该了解什么? 错
1回复

Flask-Sqlalchemy,多对多关系中辅助表的主键

我正在尝试使用Flask-Sqlalchemy为Postgresql数据库构建简单的多对多关系: 如果我尝试将书籍附加到作者的书籍列表中: 所以我有这个错误: 有没有办法配置模型来自动设置关联表中的主键?
1回复

继承表之间的 SQLAlchemy 关系引发主键错误

我正在尝试在 Sqlalchemy 中设置一个连接的继承,它工作正常。 我的架构设计需要两个继承表之间的一对多关系。 我的实际工作示例非常复杂,但我能够使用 SQLAlchemy 加入继承教程代码重现该问题。 所以我有一个 ParentResource 和一个 ChildResource。 两者
1回复

如何在 SQLAlchemy 中创建一个以 Interval 作为主键的表?

我正在尝试使用 SQLAlchemy ORM 创建一个用于处理计费频率的表,但我似乎不太高兴 以下在 Postgres 中效果很好: create table test_interval( frequency interval primary key ); insert into tes
1回复

如何在不使用 SQLAlchemy 引擎的情况下将数据框写入 Postgres 表?

我有一个要写入Postgres数据库的数据框。 此功能需要是Flask应用程序的一部分。 现在,我通过创建SQLAlchemy 引擎并将其传递给df.to_sql()以将数据框写入数据库表,从而将此插入部分作为单独的脚本运行。 但是当我将此功能集成到 Flask 应用程序中时,我已经拥有到Pos
1回复

SQLAlchemy在提交后不从自动增量设置主键

我正在使用SQLAlchemy连接到postgresql数据库。 我已经将postgresql中的主键列定义为serial类型,即自动递增整数,并在我的SQLAlchemy模型中使用primary_key=true标记它们。 在提交SQLAlchemy会话时,模型被保存到数据库中,我可以
2回复

sqlalchemy中的多对多。 如果标签已经存在,防止SQLAlchemy插入表中

我有一些ORM映射表,(缩减)如下所示: 通过此设置,我可以使用新标签创建任务。 它在tags表中创建标签行,然后在tasktags表中创建与新任务的关联。 当我尝试使用tags表中已存在的tags创建任务时,就会出现问题。 似乎SQLAlchemy 总是尝试将标签插入