Joh*_*don 5 python sqlalchemy commit
我正在尝试使用 autocommit=true 的会话在表中创建一行,但它似乎不起作用。该行不会保存到表中。
import os
import sqlalchemy
from sqlalchemy import Table
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker
from sqlalchemy import Column, create_engine, String
db_hostname = os.environ['DB_HOSTNAME']
db_username = os.environ['DB_USERNAME']
db_password = os.environ['DB_PASSWORD']
db_servicename = os.environ['DB_SERVICENAME']
engine_string = f"postgresql://{db_username}:{db_password}@{db_hostname}:5432/{db_servicename}"
engine = create_engine(engine_string, isolation_level='REPEATABLE READ',
poolclass=sqlalchemy.pool.NullPool
)
base = declarative_base()
class Testing(base):
__tablename__ = 'testing'
name = Column(String, primary_key=True)
comment = Column(String)
base.metadata.create_all(engine)
S1 = sessionmaker(engine)
with S1() as session:
test1 = Testing(name="Jimmy", comment="test1")
session.add(test1)
session.commit()
S2 = sessionmaker(engine, autocommit=True)
with S2() as session:
test2 = Testing(name="Johnny", comment="test2")
session.add(test2)
Run Code Online (Sandbox Code Playgroud)
在此代码中,名称为“Jimmy”且显式的第一行session.commit()被保存到表中。
但 name="Johnny" 的第二行未保存。在会话上指定autocommit=True似乎没有效果。
原因是什么?
如果启用SQLALCHEMY_WARN_20=1环境变量,您将看到
\n\nRemovedIn20Warning:Session.autocommit 参数已弃用,并将在 SQLAlchemy 版本 2.0 中删除。\xe2\x80\xa6
\n
实现“自动提交”行为的“2.0 方式”是
\nS2 = sessionmaker(engine)\nwith S2() as session, session.begin():\n test2 = Testing(name="Johnny", comment="test2")\n session.add(test2)\n # no explicit session.commit() required\nRun Code Online (Sandbox Code Playgroud)\nwith如果没有发生错误,当上下文管理器(块)退出时,更改将自动提交。
| 归档时间: |
|
| 查看次数: |
4829 次 |
| 最近记录: |