gpt4 book ai didi

python - 如何使用 Python 从 sqlite 数据库中提取选定的列

转载 作者:太空宇宙 更新时间:2023-11-04 04:44:09 26 4
gpt4 key购买 nike

我正在努力写作。允许用户从 sqlite 数据库中选择特定列的代码,然后将其转换为 pandas 数据框。我正在使用一个名为 test_database.db 的测试数据库和一个名为 test 的表。该表包含三列,idvalue_onevalue_two。我展示的函数存在于一个与数据库建立连接的类中,在这个函数中,用户只需要传递表名和他们想要提取的列列表。例如,在命令行 sqlite 中,如果我只想读取 value_onecolumn_two 列,我可能会键入命令 select value_one, value_two from test来自表 test。如果我在命令行中键入此命令,则该方法有效。但是,在这种情况下,我使用 python 构建输入到 pandas.read_sql_query() 中的文本字符串,并且该方法不起作用。我的代码如下所示

class ReadSQL:
def __init__(self, database):
self.database = database
self.conn = sqlite3.connect(self.database)
self.cur = self.conn.cursor()

def query_columns_to_dataframe(table, columns):
query = 'select '
for i in range(len(columns)):
query = query + columns[I] + ', '
query = query[:-2] + ' from ' + table
# print(query)
df = pd.read_sql_query(query, self.conn)
return

def close_database()
self.conn.close
return

test = ReadSQL(test_database.db)
df = query_columns_to_dataframe('test', ['value_one', 'value_two'])

我假设我的问题与 query_columns_to_dataframe() 预处理信息的方式有关,因为如果我取消注释 query_columnes_to_dataframe 中的 print 命令() 我得到一个文本字符串,它看起来与直接在命令行中输入的文本字符串相同。感谢您的帮助。

最佳答案

我消除了您代码中的一些错误以产生这个效果。请注意,我无意中更改了测试数据库中字段的名称。

import sqlite3
import pandas as pd

class ReadSQL:
def __init__(self, database):
self.database = database
self.conn = sqlite3.connect(self.database)
self.cur = self.conn.cursor()

def query_columns_to_dataframe(self, table, columns):
query = 'select '
for i in range(len(columns)):
query = query + columns[i] + ', '
query = query[:-2] + ' from ' + table
#~ print(query)
df = pd.read_sql_query(query, self.conn)
return df

def close_database():
self.conn.close
return

test = ReadSQL('test_database.db')
df = test.query_columns_to_dataframe('test', ['value_1', 'value_2'])
print (df)

输出:

   value_1  value_2
0 2 3

关于python - 如何使用 Python 从 sqlite 数据库中提取选定的列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49992516/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com