Я хочу запустить следующий код:
db = DBManager()
print("User(0, \"Hans\", Mode.start, Language.ENGLISH)")
u = User(0, "Hans", Mode.START, Language.ENGLISH)
db.upsert(u)
print("db.get(0)")
print(db.get_id(User, 0))
Это фоновый класс:
class DBManager:
def __init__(self):
self.__users = []
self.__base = declarative_base()
#Generate DB Connection string from consts
self.__engine = create_engine(DB_MS + '://' + DB_USER + ':' + DB_PWD + '@' + DB_HOST + '/' + DB_NAME)
# Build a new session
self.__base.metadata.create_all(self.__engine)
Session = sessionmaker(bind=self.__engine)
self.__session = Session()
def upsert(self, element):
try:
self.__session.merge(element)
self.__session.commit()
except:
self.__session.rollback()
def get_id(self, class_name, id):
return self.__session.query(class_name).get(id)
Но я не могу сохранить новые записи. Если я вручную сохраню новую запись с sudo -u postgres psql analytics
и оператором sql: insert into users(id, telegram_id, first_name, mode, language, last_contact) values (0,0, 'Hans', 0, 0, 'heute');
, новая запись будет представлена после. Если я использую add()
вместо merge()
, существующие будут удалены, но, как правило, функция не создает новых записей. Я использую Ubuntu 18.04 с postgresql 11.7 и python 3.8 со следующими пакетами: psycopg2-2.8.4, sqlalchemy-1.3.15