sqlalchemy merge () и add () не работают на postgresql - PullRequest
0 голосов
/ 05 апреля 2020

Я хочу запустить следующий код:

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

...