在Python中迭代新对象实例
我是OOP Python新手我有一个对象:在Python中迭代新对象实例,python,python-3.x,class,object,Python,Python 3.x,Class,Object,我是OOP Python新手我有一个对象: 类对象: 定义初始日期(自我、开始日期、结束日期、事物) self.start\u date=开始日期 self.end\u日期=end\u日期 自我事物 ( ... ) def获取内容(自我): 返回self.db.execute_fetchall(f“从{self.thing}中选择日期,p1,p2,p2,p4,其中日期介于{self.start_date}和{self.end_date}”之间) ( ... ) 现在如果我有: some_t
类对象:
定义初始日期(自我、开始日期、结束日期、事物)
self.start\u date=开始日期
self.end\u日期=end\u日期
自我事物
( ... )
def获取内容(自我):
返回self.db.execute_fetchall(f“从{self.thing}中选择日期,p1,p2,p2,p4,其中日期介于{self.start_date}和{self.end_date}”之间)
( ... )
现在如果我有:
some_things = ["table_1", "table_2", "table_3"]
该方法只是选择一个给定的表,但我希望尽可能地提高效率。是否有其他方法轮询数据库中所有3个表名,除了:
for thing in things:
Object(start_date=start_date, end_date=end_date, thing=thing)
我是否应该在批量语句中使用这种逻辑,并使用get\u all()
方法?
我选择的表(静态)总是相同的,我正在寻找从中选择数据的最快方法 > P>你可以考虑使用一个类变量,这样你就不必聚合你的东西集合了。p>
class object:
things = []
def __init__(self, thing):
self.thing = thing
self.things.append(thing)
def get_things(self):
return(self.things)
a = object(1)
b = object(2)
c = object(3)
print(a.get_things()) # Prints [1, 2, 3]
这可能是最快的方法,因为您的列表将存储在内存中,并且检索聚合列表不需要任何计算。应该指出的是,这种方法有其自身的缺点。例如,如果您更改了某个object.thing的值,则需要在列表对象中反映该更改。同样,您会看到删除或重写对象实例等操作需要进行一些额外的工作。我想您正在查找
从表A中选择t1.A、t2.B作为t1,从表B中选择t1.A、t2.B作为t2
(我不完全确定这些天我没有写太多原始sql)那么,您是否建议将其放在原始sql命令中,而不是放在sql语句中,而不是python代码中。在python方面,您感兴趣的是如何表示数据层。如果表总是相同的,但日期可以更改,那么表应该在类中硬编码。为什么要在ler甚至需要知道它们是什么?当这些在下一次大型数据库重组中发生变化时,您不必追踪该类的所有调用者。@Alex您已经在那里执行原始sql…在execute fetchall上…您只需要调整该查询…@Alex,对于这种简单的情况,单个函数是一个很好的解决方案。该类使事情变得更加简单如果你引用对象,你的代码可能会更干净。things
与a.things
相反。它实际上是一样的,只是可读性问题。是的,我同意,当你实例化对象时,我对于事物中的事物:对象(事物)你仍然会做,对吗?是的,我想…如果没有更多的上下文,就很难说。我认为这种方法可能会有问题,因为对象列表没有得到适当的维护。例如,如果你在显示的print()
之后执行delb
,那么就执行print(a.get_things())
同样,它仍将显示所有三个对象,即使b
不应再存在。
class object:
things = []
def __init__(self, thing):
self.thing = thing
self.things.append(thing)
def get_things(self):
return(self.things)
a = object(1)
b = object(2)
c = object(3)
print(a.get_things()) # Prints [1, 2, 3]