如何在python中简化此数据库调用

2024-04-20 10:39:54 发布

您现在位置:Python中文网/ 问答频道 /正文

我有以下代码:

class DatabaseMainConnection:
    def query(self, ids):
        connection = connect(self.get_secret())
        cursor = connection.cursor(name="Some Title")
        logger.info("executing database select query")
        cursor.execute(self.build_query(ids))
        logger.info("executed database select query")
        records = cursor.fetchall()

        mappings = []
        for r in records:
            mappings.append(
                {
                    "id": r[1],
                    "degree_name": r[0],
                    "uuid": r[2],
                    "email": r[3],
                    "another_id": r[4],
                }
            )
        cursor.close()
        connection.commit()
        connection.close()

        return mappings

    def build_query(self, ids):
        return f'''select d.name as degree_name,
            u.id, 
            u.value as uuid, 
            e.value as email,
            sf.sf_id as another_id
            from form_submissions fs
            left join forms fc
            on fs.id = fc.forms_id
            left join degree_name d
            on d.id = fc.degree_name_id
            left join emails e
            on e.id = fs.email_id
            left join uuids u
            ...
            where u.is_primary = 1 and fs.id in {(*ids,)};
        '''

def connect(password):
    try:
          ... 
            connection = psycopg2.connect(
            dbname=vault_data['database'],
            host=vault_data['instance_name'],
            port=vault_data['port'],
            user=vault_data['username'],
            password=password
        )
        ...
        return connection

我得到的反馈是:
1.应使用事先准备好的声明。我不理解反馈。这里可以做什么?
2.我不会提交执行SELECT的事务。我也不需要关闭光标或连接。那怎么办呢

什么是事先准备好的声明?如何将其重构为更好的


Tags: nameselfididsdatadefasconnection