python sqlite数据库操作如何返回字典

python在使用sqlite时返回单个/多个记录时的是行信息,而我们希望能够返回字典信息。如下

def dict_factory(cursor, row):
    d = {}
    for idx, col in enumerate(cursor.description):
        d[col[0]] = row[idx]
    return d

def dic2InsertSql(dic, tblName):
    sql_key = ', '.join(dic.keys())
    sql_val = ''
    for key in dic:
        if type(dic[key]) is str:
            sql_val = sql_val + '\'' + dic[key] + '\','
        else:
            sql_val = sql_val + str(dic[key]) + ' ,'

    # 移除 sql_val最后一个 ','
    return "insert into {} ({}) values ({}) ".format(tblName, sql_key, sql_val[:-1])


# 调用者需要自己补充 where之后的条件语句
def dic2UpdateSql(dic, tblName):
    sql_key = ''
    for key in dic:
        if type(dic[key]) is str:
            sql_key = sql_key + key + ' = \'' + dic[key] + '\','
        else:
            sql_key = sql_key + key + ' = ' + str(dic[key]) + ' ,'

    # 移除 sql_key 最后一个 ','
    return "update {} set {} where  ".format(tblName, sql_key[:-1])

class SqliteBase:
    def __init__(self, dbname):
        self.conn = sqlite3.connect(dbname, check_same_thread=False)

        # 设置返回的数据库信息中携带 表字段名

        # dict_factory 一定要设置为静态函数,否则会导致变量引用计数多+1,
        # 最后导致局部变量永远无法删除,这个bug没找到具体原因
        self.conn.row_factory = dict_factory
       
    def exec(self, sql):
        """
            执行sql
            返回错误
        :param sql:
        :return:
        """
        ret = True
        cursor = self.conn.cursor()
        try:
            cursor.execute(sql)
            self.conn.commit()
        except Exception as e:
            log.logger.warning('sql {} , error: {}'.format(sql, e))
            ret = False
        finally:
            pass
        return ret
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: 可以使用python中的sqlite3模块来操作sqlite数据库。首先需要连接数据库,然后使用cursor对象来执行SQL语句。示例代码如下: ```python import sqlite3 # 连接数据库 conn = sqlite3.connect('example.db') # 创建cursor cursor = conn.cursor() # 查询id为1的数据 query = 'SELECT * FROM table_name WHERE id = 1' cursor.execute(query) # 获取结果并转换成字典 result = cursor.fetchone() data = dict(zip([t[0] for t in cursor.description], result)) # 关闭连接 conn.close() ``` 注意: 替换 table_name 为你的表名。 ### 回答2: 在Python操作SQLite数据库,可以使用sqlite3模块。首先,我们需要连接到数据库并创建一个游标对象来执行SQL语句。然后,可以使用SELECT语句来查询特定ID的数据。最后,将查询到的结果存储在字典中。 下面是一个示例代码: ```python import sqlite3 def get_data_by_id(id): # 连接到数据库 conn = sqlite3.connect('mydatabase.db') # 创建游标对象 cursor = conn.cursor() # 查询数据 cursor.execute("SELECT * FROM mytable WHERE id=?", (id,)) # 获取查询结果 result = cursor.fetchone() # 关闭连接 cursor.close() conn.close() if result: # 将查询结果存储在字典中 data = {"id": result[0], "name": result[1], "age": result[2]} return data else: return None # 使用示例 id = 1 data = get_data_by_id(id) if data: print(f"找到ID为{id}的数据:") print(data) else: print(f"未找到ID为{id}的数据。") ``` 上述代码中,假设数据库文件名为mydatabase.db,表名为mytable,包含id、name和age三个字段。getConnection函数用于连接到数据库,getDataById函数根据传入的id查询数据,将查询结果存储在字典data中,并返回字典。最后,我们可以根据返回的数据进行处理,如果返回值为None,则表示未找到对应的数据。 ### 回答3: 要根据id查找数据并生成字典,首先需要在Python中使用sqlite3模块连接到SQLite数据库。然后,我们可以执行一条查询语句来检索对应id的数据。最后,将查询结果存储在字典中。 下面是一个示例代码: ```python import sqlite3 def get_data_by_id(id): conn = sqlite3.connect('database.db') # 连接到SQLite数据库 cursor = conn.cursor() cursor.execute("SELECT * FROM tablename WHERE id=?", (id,)) result = cursor.fetchone() # 获取查询结果中的一行数据 # 将查询结果存储在字典中 data_dict = {} data_dict['id'] = result[0] data_dict['name'] = result[1] data_dict['age'] = result[2] # 根据需要添加其他字段 conn.close() # 关闭数据库连接 return data_dict # 调用函数 id = 1 data = get_data_by_id(id) print(data) ``` 在上面的代码中,我们首先连接到数据库并创建一个游标对象。然后,使用`execute`方法执行查询语句,将id作为参数传递给查询语句的占位符。接下来,我们使用`fetchone`方法获取查询结果的第一行数据。然后,将查询结果存储在一个字典中,其中键是字段名,值是对应的数据。 最后,我们关闭数据库连接,并打印输出查询到的字典数据。 注意:在代码中的`database.db`是数据库文件的路径,`tablename`是要查询的表的名称。你需要根据具体情况修改这些值。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

睡在床板下_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值