动态迭代循环

2024-09-30 20:35:02 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在寻找一种更为动态的方式来编写下面的语句。你知道吗

data = [r[0], r[1], r[2], r[3], r[4], r[5], r[6], r[7], r[8], r[9], r[10], r[11], r[12], r[13]] 

r表示传入的响应数据,我将其作为响应数据并将项枚举到字典中。这是可行的,但它太静态了。如果添加或删除了数据,则需要调整API代码以考虑这些数据。你知道吗

处理这个问题的直观方法是什么?下面是一个完整类的示例,以供参考。你知道吗

class Pots(Resource):
    def get(self, store):
        print('USAGE: Received a request at POTS for Store ' + store )
        conn = sqlite3.connect('store-db.db')
        cur = conn.cursor()
        cur.execute('SELECT * FROM Pots WHERE StoreNumber like ' + store) 
        res = cur.fetchall()
        if not res:
            print("RESPONSE: No data was found for this request.")
            return('No data was found', 404)
        else:
            for r in res:
                column_names = ["StoreNumber", "ForwardOnFail", "HuntLine","FirePrimary","FireSecondary", "BurglarPrimary", "BurglarSecondary","BurglarTertiary", "DNR", "PassengerElevator", "FreightElevator", "Escalator1", "Escalator2","ShopperTrak"]
                data = [r[0], r[1], r[2], r[3], r[4], r[5], r[6], r[7], r[8], r[9], r[10], r[11], r[12], r[13]]         
                datadict = {column_names[itemindex]:item for itemindex, item in enumerate(data)}
                return(datadict, 200)

编辑:请忽略任何SQL低效。虽然我很感激您的建议,但我知道并且不打算在生产中使用它。只是为了测试。:)


Tags: 数据storenofordbdatarequestres
3条回答

为此使用切片r[:14]

print(r[:14])

常规列表理解:

 r = [1, 2, 3] 
 data = [r[0], r[1], r[2]]
 data
 [1, 2, 3]
 data = [r[i] for i in range(len(r)-1)]
 data
 [1, 2, 3]

你可能在找这样的东西。你知道吗

注意,我们使用的是^{}行工厂,因此我们得到row.keys()。你知道吗

我还冒昧地

  • 修复SQL注入漏洞
  • 添加limit子句(因为始终只返回一行)
  • 由于上述原因,使用fetchone()代替fetchall()。你知道吗

conn = sqlite3.connect("store-db.db")
conn.row_factory = sqlite3.Row
cur = conn.cursor()
cur.execute(
    "SELECT * FROM Pots WHERE StoreNumber like %s limit 1",
    (store,),
)
row = cur.fetchone()
if not row:
    raise NotImplementedError("...")
data_dict = {key: row[key] for key in row.keys()}

相关问题 更多 >