我正在努力写作。代码,允许用户从sqlite数据库中选择特定的列,然后将其转换为pandas数据帧。我正在使用名为test_database.db
的测试数据库,其中包含一个标题为test
的表格。该表有三列id
,value_one
和value_two
。我展示的函数存在于一个与数据库建立连接的类中,在这个函数中,用户只需要传递表名和他们想要提取的列列表。例如,在命令行sqlite中,如果我只想读取表select value_one, value_two from test
中的value_one
和column_two
列,我可以输入命令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()
预先处理信息的方式有关,因为如果我取消注释print
中的query_columnes_to_dataframe()
命令,我会得到一个看起来很像的文本字符串如果我只是直接在命令行中输入它,那么相同。任何帮助表示赞赏。
答案 0 :(得分:1)
我在你的代码中删除了一些错误来生成这个错误。请注意,我无意中更改了测试数据库中字段的名称。
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
答案 1 :(得分:0)
您的代码充满了语法错误和问题
return
中的query_columns_to_dataframe
应为return df
。这是您的代码不返回任何内容的主要原因。self.cur
未使用query_columns_to_dataframe
def close_database()
close_database
self.conn.close
df = query_columns_to_dataframe
应为df = test.query_columns_to_dataframe
修复这些错误,您的代码应该有效。