Я пытаюсь обновить базу данных с помощью sqlalchemy, и мне нужно закрыть соединение / сеанс после выполнения сценария, чтобы использовать другое действие (удалить). Я переписываю часть предыдущего кода (не мой) и пробовал оба кода ниже, но, к сожалению, ничего нового не написано в базе данных. Это не обновляет базу данных новым значением, если я проверяю с помощью браузера базы данных или по коду (с функцией поиска).
Большое спасибо заранее
Первый код, который я попробовал:
import os
import sqlalchemy as sa
from sqlalchemy.orm import sessionmaker
from contextlib import contextmanager
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import Column, ForeignKey, Integer, String
from sqlalchemy import create_engine
import logging
logging.basicConfig()
logging.getLogger('sqlalchemy.engine').setLevel(logging.INFO)
Base = declarative_base()
path1=os.getcwd()
datastore_file = os.path.join(
path1,
'../mydatabase.db'
)
engine = sa.create_engine('sqlite:///{}'.format(datastore_file))
Base.metadata.create_all(engine)
Session = sessionmaker(bind=engine)
class ComponentValue(Base):
__tablename__ = 'component_value'
id = Column(Integer, primary_key=True)
value = Column(String(64), nullable=False)
class ThingOne(object):
def go(self, session,ct):
(session.query(ComponentValue).filter(ComponentValue.value == ct.value)).first()
def lookup(ct):
session = Session()
try:
val =ThingOne().go(session,ct)
session.commit()
except:
session.rollback()
raise
finally:
session.close()
return val
def update(ct):
session = Session()
try:
val = ThingOne().go(session,ct)
if not val and len(ct.value.strip()):
val = ComponentValue(value=ct.value)
session.add(val)
session.commit()
except:
session.rollback()
raise
finally:
session.close()
Второй код, который я тоже пробовал:
import os
import sqlalchemy as sa
from sqlalchemy.orm import sessionmaker
from contextlib import contextmanager
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import Column, ForeignKey, Integer, String
from sqlalchemy.orm import relationship
from sqlalchemy import create_engine
import logging
logging.basicConfig()
logging.getLogger('sqlalchemy.engine').setLevel(logging.INFO)
Base = declarative_base()
path1=os.getcwd()
datastore_file = os.path.join(
path1,
'../mydatabase.db'
)
engine = sa.create_engine('sqlite:///{}'.format(datastore_file))
Base.metadata.create_all(engine)
Session = sessionmaker()
Session.configure(bind=engine)
class ComponentValue(Base):
__tablename__ = 'component_value'
id = Column(Integer, primary_key=True)
value = Column(String(64), nullable=False)
@contextmanager
def session_scope():
session = Session()
try:
yield session
session.commit()
except:
session.rollback()
raise
finally:
session.close()
class ThingOne(object):
def go(self, session,ct):
(session.query(ComponentValue).filter(ComponentValue.value == ct.value)).first()
def lookup(ct):
with session_scope() as session:
val =ThingOne().go(session,ct)
return val
def update(ct):
with session_scope() as session:
val = ThingOne().go(session,ct)
if not val and len(ct.value.strip()):
val = ComponentValue(value=ct.value)
session.add(val)
session.commit()