Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 方法同时返回自身和值_Python_Python 3.x_Mysql Python - Fatal编程技术网

Python 方法同时返回自身和值

Python 方法同时返回自身和值,python,python-3.x,mysql-python,Python,Python 3.x,Mysql Python,我正在mysql连接器上创建python包装器。到目前为止,情况很简单: class DBconnector: def __init__(self, columns=None, values=None): #connect to db pass def getcolumns(self, database=None): columns = ("columnA1", "columnA2") return columns

我正在mysql连接器上创建python包装器。到目前为止,情况很简单:

class DBconnector:
    def __init__(self, columns=None, values=None):
        #connect to db
        pass

    def getcolumns(self, database=None):
        columns = ("columnA1", "columnA2")
        return columns

    def getvalues(self, table=None, columns=None):
        values = ("valB1", "valB2")
        columns = columns
        return values

    def getprimary_key(self, table=None):
        table_key = "someTableKey"
        return table_key

db_conn = DBconnector()
mycolumns = db_conn.getcolumns()
myvalues = db_conn.getvalues()
mykey = db_conn.getprimary_key()
print(mycolumns, myvalues, mykey)
>>>> ('columnA1', 'columnA2') ('valB1', 'valB2') someTableKey
现在,我想实现链式方法,如
.as\u list()
.as\u dict()
等。。。这将使我能够在某些情况下以我需要的方式获取数据。例如,当我询问
db_conn.getvalues.asdict()
时,我将获取值和列作为键。 我可以这样实施:

class DBconnector:
    def __init__(self, columns=None, values=None):
        #connect to db
        self.columns = columns
        self.values = values

    def getvalues(self, table=None, columns=None):
        self.values = ("valB1", "valB2")
        self.columns = columns
        return self

    def __repr__(self):
        return str(self.values)

    def asdict(self):
        mydict = {}
        for idx, col in enumerate(self.columns):
            mydict[col] = self.values[idx]
        return mydict

db_conn = DBconnector()
mycolumns = db_conn.getvalues(columns=["mycolumn1", "mycolumn2"])
print(mycolumns)
print(type(mycolumns))

mydictcolumns = mycolumns.asdict()
print(mydictcolumns)

>>>> ('valB1', 'valB2')
>>>> <class '__main__.DBconnector'>
>>>> {'mycolumn1': 'valB1', 'mycolumn2': 'valB2'}
class DBconnector:
def u u init(self,columns=None,values=None):
#连接到数据库
self.columns=列
self.values=值
def getvalues(self,table=None,columns=None):
self.values=(“valB1”、“valB2”)
self.columns=列
回归自我
定义报告(自我):
返回str(self.values)
def asdict(自我):
mydict={}
对于idx,枚举中的列(self.columns):
mydict[col]=自身值[idx]
返回mydict
db_conn=DBconnector()
mycolumns=db_conn.getvalues(列=[“mycolumn1”、“mycolumn2”])
打印(mycolumns)
打印(类型(mycolumns))
mydictcolumns=mycolumns.asdict()
打印(mydictcolumns)
>>>>(‘valB1’、‘valB2’)
>>>> 
>>>>{'mycolumn1':'valB1','mycolumn2':'valB2'}
但我对这种方法有一些问题和疑问:

Main方法
getvalues()
将只返回我无法再直接解析的对象,我必须实现额外的方法才能获得像
.values()
(?)这样的值。 总的来说,我不知道如何避免过于复杂,使其用户友好和可读性。设计此类类/模块的正确方法是什么?

虽然您的意图是好的(“友好且可读”),但实现是值得怀疑的:

class DBconnector:
    def __init__(self, columns=None, values=None):
        #connect to db
        self.columns = columns
        self.values = values

    def getvalues(self, table=None, columns=None):
        self.values = ("valB1", "valB2")
        self.columns = columns
        return self
启动具有
值的db连接器
?连接器应该允许对数据库进行读写操作,为什么是值?如果一个人选择从数据库中读取某个内容,该怎么办。连接器中的表名在哪里?原始代码非常混乱,希望您能将其重构为更可读的代码

另外,对于堆栈溢出问题,回答起来要容易得多,下次请尽量使您的问题更加集中

如果只有您的问题而没有代码,我会说让一个连接器返回本机数据库查询结果类型,并在类外保留一个单独的函数,以将此结果转换为不同的类型(例如元组到dicts)

一般来说,我认为非常简单的介绍数据库连接是 也可以快速进入ORM领域

虽然您的意图是好的(“友好且可读”),但实施过程值得怀疑:

class DBconnector:
    def __init__(self, columns=None, values=None):
        #connect to db
        self.columns = columns
        self.values = values

    def getvalues(self, table=None, columns=None):
        self.values = ("valB1", "valB2")
        self.columns = columns
        return self
启动具有
值的db连接器
?连接器应该允许对数据库进行读写操作,为什么是值?如果一个人选择从数据库中读取某个内容,该怎么办。连接器中的表名在哪里?原始代码非常混乱,希望您能将其重构为更可读的代码

另外,对于堆栈溢出问题,回答起来要容易得多,下次请尽量使您的问题更加集中

如果只有您的问题而没有代码,我会说让一个连接器返回本机数据库查询结果类型,并在类外保留一个单独的函数,以将此结果转换为不同的类型(例如元组到dicts)

一般来说,我认为非常简单的介绍数据库连接是
也可以快速进入ORM领域

第一:请使用正确的大写字母。第二:你问的问题不止一个。请将您的问题分为不同的问题。我已修改为单个问题。我不确定你们在我的模型代码中指的是哪个大写字母,那个评论太模糊了。你投反对票比帮助别人更快。检查你的主题。在你的文本中还有一些
i
,而不是
i
。请使用带背景标记的
内联代码格式化
。谢谢@buhtz。根据具体问题进行更新,并在说明中固定了3个字母。希望这将有助于理解现在的代码。不确定我的内联代码格式有什么问题,但我真的希望现在就足够了。第一:请使用正确的大写字母。第二:你问的问题不止一个。请将您的问题分为不同的问题。我已修改为单个问题。我不确定你们在我的模型代码中指的是哪个大写字母,那个评论太模糊了。你投反对票比帮助别人更快。检查你的主题。在你的文本中还有一些
i
,而不是
i
。请使用带背景标记的
内联代码格式化
。谢谢@buhtz。根据具体问题进行更新,并在说明中固定了3个字母。希望这将有助于理解现在的代码。不确定我的内联代码格式有什么问题,但我真的希望现在就足够了。谢谢你的建议并回复@EPo!对于启动列和值-这只是我关于如何将数据从一个方法传递到另一个方法的想法,但我想这是错误的想法:)进行验证是可以的,但另一个建议是,您可以尽量远离类,只需对函数做些事情-这应该有助于决定是否需要状态(类)还有,如果答案适合“因为堆栈溢出,下次你的问题会更加集中”,那么你也可以将其标记为已接受-这是我的问题-我没有非常具体的问题-总是有办法解决的。我不确定我的方法是否正确,整体的思维方式,这是我无法用简单的方法得到任何帮助的。很容易找到直截了当的答案,但不容易理解,只要你的方法是好的:)和thx的链接,非常有用!还有-你可以在那里回答更一般的问题,但是