如何使用Python从sqlite数据库中提取选择列

时间:2018-04-24 02:22:51

标签: python python-3.x sqlite

我正在努力写作。代码,允许用户从sqlite数据库中选择特定的列,然后将其转换为pandas数据帧。我正在使用名为test_database.db的测试数据库,其中包含一个标题为test的表格。该表有三列idvalue_onevalue_two。我展示的函数存在于一个与数据库建立连接的类中,在这个函数中,用户只需要传递表名和他们想要提取的列列表。例如,在命令行sqlite中,如果我只想读取表select value_one, value_two from test中的value_onecolumn_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()命令,我会得到一个看起来很像的文本字符串如果我只是直接在命令行中输入它,那么相同。任何帮助表示赞赏。

2 个答案:

答案 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)

您的代码充满了语法错误和问题

  1. return中的query_columns_to_dataframe应为return df。这是您的代码不返回任何内容的主要原因。
  2. self.cur未使用
  3. 声明query_columns_to_dataframe
  4. 时缺少自我参数
  5. 在行def close_database()
  6. 的末尾缺少冒号
  7. 声明close_database
  8. 时缺少自我参数
  9. 此处缺少括号:self.conn.close
  10. df = query_columns_to_dataframe应为df = test.query_columns_to_dataframe
  11. 修复这些错误,您的代码应该有效。