Python 为函数存储创建类

Python 为函数存储创建类,python,sqlite,function,class,import,Python,Sqlite,Function,Class,Import,我正在为某个数据库编写代码。我想创建一些函数,这样可以更容易地将内容写入数据库并从数据库中取出。无论如何,我想做一些函数 from sqlite3 import Connection class SQLiteConnection(Connection): def test_schema(self): self.execute('CREATE TABLE test (name, location);') def test_populate(self):

我正在为某个数据库编写代码。我想创建一些函数,这样可以更容易地将内容写入数据库并从数据库中取出。无论如何,我想做一些函数

from sqlite3 import Connection


class SQLiteConnection(Connection):
    def test_schema(self):
        self.execute('CREATE TABLE test (name, location);')

    def test_populate(self):
        self.execute('''
            INSERT INTO test
            VALUES ('kungphu', 'Tokyo'),
                   ('Argento', 'Jerusalem')
        ''')

    def test_select(self):
        return self.execute('SELECT * from test')
我的第一个想法是打开一个新的.py文件,获取其中的所有函数,然后使用:

from FileName import Function
然后使用它,它就工作了。但是,如果有很多函数,那就不太好了,因为我需要手动导入我想要的每个函数:

从文件名导入函数1 从文件名导入函数2 从文件名导入功能3

相反,当我使用import random时,我可以在代码本身中使用random.func并继续

一位朋友建议创建一个类。我没有想到这一点,因为我没有试图创建一个对象。例如,在我当前的课程代码中:

import sqlite3

conn = sqlite3.connect('asfan.db')
c = conn.cursor()

class Manager:

def save_chunk():
    c.execute("INSERT INTO DATA_CHUNKS VALUES(234, 'hello', '20190617', 'article')")
    conn.commit()
    c.close()
    conn.close()
在主界面中,我只是从文件中调用导入管理器,它工作得很好。但是PyCharm并不真正喜欢我编写的函数,因为该方法没有PyCharm建议的第一个参数,并且是静态的

这是存储函数的正确方法吗?
我希望能得到一些帮助和参考,以了解我正在寻找的内容。

我不推荐仅将类用于函数存储。您需要创建一个实例来调用实例本身不重要的函数,或者将每个函数都设置为一个,这也是不好的做法

通常,对于导入函数,可以在一行中完成

from module_name import fn_one, fn_two, fn_three
对于许多关于命名和导入的非常好的标准,除其他外,我强烈建议阅读和采用

我不知道您是否打算让类代码都成为单个文件的内容,但在不同的上下文中打开和关闭资源时应该小心;如果有人导入了该文件,则会打开数据库连接,但除非调用save_chunk,否则不会关闭该连接,并且该连接将不再可用

在这种特殊情况下,如果您进一步使用类来管理数据库连接,那么类可能是有意义的。是管理数据库连接之类的设置和拆卸的常用、有用的方法

也就是说,如果您既想利用上下文管理器,又想添加实用程序函数,那么就可以创建子类

from sqlite3 import Connection


class SQLiteConnection(Connection):
    def test_schema(self):
        self.execute('CREATE TABLE test (name, location);')

    def test_populate(self):
        self.execute('''
            INSERT INTO test
            VALUES ('kungphu', 'Tokyo'),
                   ('Argento', 'Jerusalem')
        ''')

    def test_select(self):
        return self.execute('SELECT * from test')
用法示例:

>>> from scm import SQLiteConnection
>>> 
>>> with SQLiteConnection(':memory:') as conn:
...     conn.test_schema()
...     conn.test_populate()
...     for row in conn.test_select():
...         print(row)
... 
('kungphu', 'Tokyo')
('Argento', 'Jerusalem')

我在这里添加的方法是。。。非常愚蠢,而且绝对不是处理固定装置或测试的好方法。它们只是为了说明,如果在您的用例中有意义的话,您可以如何进行这项工作。

您可以对您的模块执行相同的操作。导入文件名,然后写入FileName.Function1。