# Insert query arguments

**URL:** <https://forum.inductiveautomation.com/t/insert-query-arguments/60491>\
**Category:** Ignition\
**Tags:** ignition81\
**Created:** [June 8, 2022, 1:07pm UTC](https://forum.inductiveautomation.com/t/insert-query-arguments/60491 "2022-06-08T13:07:25Z")\
**Posts on this page:** 6\
**Page:** 1

<div class="post-metadata">

**Author:** ![Garrett.spillman](https://avatars.discourse-cdn.com/v4/letter/g/54ee81/32.png) [@Garrett.spillman](https://forum.inductiveautomation.com/u/Garrett.spillman)\
**Post date:** [June 8, 2022, 1:07pm UTC](https://forum.inductiveautomation.com/t/insert-query-arguments/60491/1 "2022-06-08T13:07:25Z")

</div>

Hi all, I’m relatively new to ignition and don’t come from a coding background but in my query where I am trying to write a dataset to a database table I don’t seem to understand what I need to put as my arguments to reference the dataset. Right now I just have them set with filler strings.

```auto
id = "id"
PurchaseOrderID = "PurchaseOrderID"
ProjectID = "ProjectID"
ItemCompanyID = "ItemCompanyID"
ItemDescription = "ItemDescription"
PurchaseQty = "PurchaseQty"
SumOfQtyReceived = "SumOfQtyRecevied"
QtyUnreceived = "QtyUnrecevied"

args =[id,PurchaseOrderID, ProjectID, ItemCompanyID, ItemDescription, PurchaseQty, SumOfQtyReceived, QtyUnreceived]

iquery = "INSERT INTO dbo.s40150_01_010 (id ,PurchaseOrderID, ProjectID, ItemCompanyID, ItemDescription, PurchaseQty, SumOfQtyReceived, QtyUnreceived) VALUES (?,?,?,?,?,?,?,?)" 

for row in range(len(newPyDataSet)):
          system.db.runPrepUpdate(iquery,args,'inventory')

```

---

<div class="post-metadata">

**Author:** ![dkhayes117](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/dkhayes117/32/68344_2.png) [@dkhayes117](https://forum.inductiveautomation.com/u/dkhayes117)\
**Post date:** [June 8, 2022, 1:25pm UTC](https://forum.inductiveautomation.com/t/insert-query-arguments/60491/2 "2022-06-08T13:25:10Z")

</div>

If you don’t need any argument manipulation before running the query, I think you could do

```auto
for row in newPyDataSet:
	system.db.runPrepUpdate(iquery,row,'inventory')

```

---

<div class="post-metadata">

**Author:** ![Garrett.spillman](https://avatars.discourse-cdn.com/v4/letter/g/54ee81/32.png) [@Garrett.spillman](https://forum.inductiveautomation.com/u/Garrett.spillman)\
**Post date:** [June 8, 2022, 1:31pm UTC](https://forum.inductiveautomation.com/t/insert-query-arguments/60491/3 "2022-06-08T13:31:06Z")

</div>

Thank you. I was just misunderstanding that I didn’t did need any arguments. That worked like a charm and it now fills in as expected.

---

<div class="post-metadata">

**Author:** ![dkhayes117](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/dkhayes117/32/68344_2.png) [@dkhayes117](https://forum.inductiveautomation.com/u/dkhayes117)\
**Post date:** [June 8, 2022, 1:36pm UTC](https://forum.inductiveautomation.com/t/insert-query-arguments/60491/4 "2022-06-08T13:36:26Z")

</div>

prepUpdate requires a list of values for arguments. The pydataset’s data is a list of lists so when you iterate over it, each row is a list, which is why passing `row` works.

You can address each value in the list by doing

```auto
for row in newPyDataSet:
    id = row['id']
    ...

```

or

```auto
for row in newPyDataSet:
    for value in row:
        print value

```

---

<div class="post-metadata">

**Author:** ![lrose](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/lrose/32/62724_2.png) [@lrose](https://forum.inductiveautomation.com/u/lrose)\
**Post date:** [June 8, 2022, 1:44pm UTC](https://forum.inductiveautomation.com/t/insert-query-arguments/60491/5 "2022-06-08T13:44:23Z")

</div>

The best way to do this, is to actually build the query inside of a loop and then execute it afterwards. For performance reasons you don’t want to execute a single query for each row.

I would recommend that you do something like this:

```auto
iquery = 'INSERT INTO dbo.s40150_01_010 (id ,PurchaseOrderID, ProjectID, ItemCompanyID, ItemDescription, PurchaseQty, SumOfQtyReceived, QtyUnreceived) VALUES {}'
valueArgs = ','.join(['(?,?,?,?,?,?,?,?)'] * newPyDataSet.rowCount)

args = [value for row in pyData for value in row]

system.db.runPrepUpdate(iquery.format(valueArgs),args,'inventory')

```

---

<div class="post-metadata">

**Author:** ![pturmel](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/pturmel/32/3295_2.png) [@pturmel](https://forum.inductiveautomation.com/u/pturmel)\
**Post date:** [June 8, 2022, 2:03pm UTC](https://forum.inductiveautomation.com/t/insert-query-arguments/60491/6 "2022-06-08T14:03:04Z")

</div>

> [@lrose](#):
>
> For performance reasons you don’t want to execute a single query for each row.

Just be careful to segment--there is a limit on the number of placeholders you can use. (4k, IIRC.)
