Search code examples
databasepython-2.7robotframeworkpymysql

How to store a value from database query result into a Variable in Robot Framework


I've written Robot Framework Code to run database query and log the result of the query

Connect To Database pymysql ${Database_name}    ${UserName} ${Password} ${DatabaseHost} ${Port} 

Check If Exists In Database SELECT cic.comboMenuItemId, mi1.zomatoName AS zomatoComboMenuItemName, cic.quantity, \ mi1.isVirtualCombo, cic.isItemVisible, cic.menuItemId, mi2.zomatoName AS zomatoMenuItemName, mi2.isVirtualCombo,micq.currentInventory FROM CombinationItemsComposition AS cic INNER JOIN MenuItem AS mi1 ON mi1.id = cic.comboMenuItemId INNER JOIN MenuItem AS mi2 ON mi2.id = cic.menuItemId INNER JOIN MenuItemCurrentQuantity AS micq ON micq.itemId = mi2.id WHERE mi1.isVirtualCombo NOT IN (0) AND micq.distributionId IN (7) AND mi1.isActive IN (1) AND mi2.isActive IN (1) AND micq.isAvailableOnZomato IN (1) ORDER BY cic.comboMenuItemId    

@{QueryResult}  Query   SELECT cic.comboMenuItemId, mi1.zomatoName AS zomatoComboMenuItemName, cic.quantity, \ mi1.isVirtualCombo, cic.isItemVisible, cic.menuItemId, mi2.zomatoName AS zomatoMenuItemName, mi2.isVirtualCombo,micq.currentInventory FROM CombinationItemsComposition AS cic INNER JOIN MenuItem AS mi1 ON mi1.id = cic.comboMenuItemId INNER JOIN MenuItem AS mi2 ON mi2.id = cic.menuItemId INNER JOIN MenuItemCurrentQuantity AS micq ON micq.itemId = mi2.id WHERE mi1.isVirtualCombo NOT IN (0) AND micq.distributionId IN (7) AND mi1.isActive IN (1) AND mi2.isActive IN (1) AND micq.isAvailableOnZomato IN (1) ORDER BY cic.comboMenuItemId

Log Many    @{QueryResult}                      

Result of Query

(56, 'Party Pack (Serves 6-8)', 6, 1, 1, 1, 'Afghani Chicken Tikka Biryani (Heavy Eater)', 0, 11)   
(58, 'Party Pack (Serves 6-8)', 6, 1, 1, 3, 'Chicken Tikka Biryani (Heavy Eater)', 0, 4)    
(61, 'Party Pack (Serves 6-8)', 6, 1, 1, 5, 'Paneer Makhani Biryani (Heavy Eater)', 0, 18)  
(79, 'Party Pack (Serves 6-8)', 6, 1, 1, 74, 'Afghani Veg Biryani (Heavy Eater)', 0, 10)    
(90, 'Party Pack (Serves 6-8)', 6, 1, 1, 89, 'Butter Chicken Biryani (Heavy Eater)', 0, 0)  
(253, 'Party Pack (Serves 6-8)', 6, 1, 1, 250, 'Classic Hyderabadi Chicken Biryani (Heavy Eater)', 0, 0)    
(255, 'Party Pack (Serves 6-8)', 6, 1, 1, 252, 'Classic Hyderabadi Veg Biryani (Heavy Eater)', 0, 15)   
(339, 'Party Pack (Serves 6-8)', 6, 1, 1, 325, 'Awadhi Veg Biryani (Heavy Eater)', 0, 26)   
(340, 'Party Pack (Serves 6-8)', 6, 1, 1, 326, 'Awadhi Chicken Biryani (Heavy Eater)', 0, 0)    
(381, 'Classic Chicken Tikka Roll ', 1, 1, 0, 408, 'Malabari Paratha', 0, 191)  
(383, 'Signature Chicken Seekh Kebab Roll ', 1, 1, 0, 408, 'Malabari Paratha', 0, 191)

Please can anyone suggest how can I store the values of one particular row in variables

Thank You


Solution

  • Each row from the DB is basically returned as a tuple. To access a particular row use indexing.

    Connect To Database pymysql ${Database_name}    ${UserName} ${Password} ${DatabaseHost} ${Port} 
    
    Check If Exists In Database SELECT cic.comboMenuItemId, mi1.zomatoName AS zomatoComboMenuItemName, cic.quantity, \ mi1.isVirtualCombo, cic.isItemVisible, cic.menuItemId, mi2.zomatoName AS zomatoMenuItemName, mi2.isVirtualCombo,micq.currentInventory FROM CombinationItemsComposition AS cic INNER JOIN MenuItem AS mi1 ON mi1.id = cic.comboMenuItemId INNER JOIN MenuItem AS mi2 ON mi2.id = cic.menuItemId INNER JOIN MenuItemCurrentQuantity AS micq ON micq.itemId = mi2.id WHERE mi1.isVirtualCombo NOT IN (0) AND micq.distributionId IN (7) AND mi1.isActive IN (1) AND mi2.isActive IN (1) AND micq.isAvailableOnZomato IN (1) ORDER BY cic.comboMenuItemId    
    
    @{QueryResult}  Query   SELECT cic.comboMenuItemId, mi1.zomatoName AS zomatoComboMenuItemName, cic.quantity, \ mi1.isVirtualCombo, cic.isItemVisible, cic.menuItemId, mi2.zomatoName AS zomatoMenuItemName, mi2.isVirtualCombo,micq.currentInventory FROM CombinationItemsComposition AS cic INNER JOIN MenuItem AS mi1 ON mi1.id = cic.comboMenuItemId INNER JOIN MenuItem AS mi2 ON mi2.id = cic.menuItemId INNER JOIN MenuItemCurrentQuantity AS micq ON micq.itemId = mi2.id WHERE mi1.isVirtualCombo NOT IN (0) AND micq.distributionId IN (7) AND mi1.isActive IN (1) AND mi2.isActive IN (1) AND micq.isAvailableOnZomato IN (1) ORDER BY cic.comboMenuItemId
    
    ${firstRow}     Set Variable   ${QueryResult[0]}
    ${secondRow}    Set Variable   ${QueryResult[1]}
    

    In the above example ${firstRow} will contain the value (56, 'Party Pack (Serves 6-8)', 6, 1, 1, 1, 'Afghani Chicken Tikka Biryani (Heavy Eater)', 0, 11) and ${secondRow} will contain the value
    (58, 'Party Pack (Serves 6-8)', 6, 1, 1, 3, 'Chicken Tikka Biryani (Heavy Eater)', 0, 4)