学习如何在sqlalchemy-python和postgres中添加一行



我有一个如下定义的表,可以使用这个模式从数据库中读取并创建丢失的表。在如何向数据库中添加一行时遇到了困难:

from sqlalchemy import create_engine, select, table, inspect, MetaData
from sqlalchemy import Column, Integer, String, LargeBinary, Text, 
ForeignKey, Table, Boolean, JSON
from sqlalchemy.orm import sessionmaker, registry, relationship
from sqlalchemy.ext.declarative import declarative_base
Base     = declarative_base()
engine   = create_engine(STR_CONN) #, echo=True)
metadata = MetaData(engine)
Session  = sessionmaker(bind=engine)
session  = Session()
@mapper_registry.mapped
@dataclass
class UsersTbl():
__table__ = Table(
"users",
metadata,
Column("email_address", String, primary_key=True),
Column("saved_state", JSON),
)
email_address: str   = None
saved_state: str     = None
lookupcolumn: Column = __table__.columns['email_address']

metadata.create_all(engine)

如果需要,创建丢失的表

sql = select(table.__table__).where(table.lookupcolumn == lookupkey)
with engine.connect() as conn:
dbdata = conn.execute(sql).all()

按预期返回一行

但是当我尝试添加一行如下

entry = UsersTbl("blah@blah.com", "{}")
session.add(entry)
session.commit()

我收到一个错误
"quot"ProgrammingError:(psycopg2.errors.UndefinedTable(对表"的FROM子句项的引用无效;用户";第1行:。。。T INTO用户(email_address,saved_state(值(users.emai。。。^提示:有一个表"的条目;用户";,但不能从查询的这一部分引用它。

[SQL:插入到用户(email_address,saved_state(值(users.email_aaddress,%(saved_state(s(返回用户.email_address][参数:{‘save_state’:"{}"}](此错误的背景信息位于:https://sqlalche.me/e/14/f405)"quot">

令人沮丧的是,我可以使用以下方法来发布数据,但似乎无法自动创建上面缺失的表或检索数据:(感谢您的帮助!

class User2(Base):
__tablename__ = 'users'
email_address = Column("email_address", String, primary_key=True)
saved_state = Column("saved_state", String)
def __init__(self, email_address=None, saved_state=None):
self.email_address = email_address
self.saved_state = saved_state

entry = User2("blah@blah.com2", "{}")
session.add(entry)
session.commit()

如有任何帮助,将不胜感激

stmt = insert(Tables.UsersTbl).values(('spongebob2d', "Spongebob Squarepants"))
with engine.connect() as conn:
result = conn.execute(stmt)

成功了:(

最新更新