# Scalar Named Query by Script return empty pyDictionary

**URL:** <https://forum.inductiveautomation.com/t/scalar-named-query-by-script-return-empty-pydictionary/82636>\
**Category:** Ignition Early Access\
**Tags:** database, scripting, ignition81\
**Created:** [December 3, 2023, 10:22am UTC](https://forum.inductiveautomation.com/t/scalar-named-query-by-script-return-empty-pydictionary/82636 "2023-12-03T10:22:04Z")\
**Posts on this page:** 10\
**Page:** 1

<div class="post-metadata">

**Author:** ![tecnoeletronic](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/tecnoeletronic/32/50975_2.png) [@tecnoeletronic](https://forum.inductiveautomation.com/u/tecnoeletronic)\
**Post date:** [December 3, 2023, 10:22am UTC](https://forum.inductiveautomation.com/t/scalar-named-query-by-script-return-empty-pydictionary/82636/1 "2023-12-03T10:22:04Z")

</div>

**Gateway Version 8.1.32**

Hi,

i create a very simple "scalar named query" that return a string.

 ![image](https://us1.discourse-cdn.com/inductiveautomation/original/3X/8/a/8a072cd3fe20198df3827b0c86b9f59dd9ee0a86.png)

The returned string is a rapresentation of a json (nvarchar(max)).  
When the NQ is called by Designer using the "Testing tool" it works correctly.

 ![image](https://us1.discourse-cdn.com/inductiveautomation/original/3X/f/1/f12f942a120f134080e559ff49fecfda1cfbc51f.png)

When the NQ is called by scripting the return value is not a scalar but an empty pyDataset (i know that is a new feature.. but scalar must return Any value and not the pyDataset).

```auto
def nq_Historian_Template_Props_by_Id(id):
	nq = "RUB2/IG/Historian_Template_by_Plant"
	nq_par = {'Id':id}
	props = system.db.runNamedQuery(nq, nq_par)
	return props

```

 ![image](https://us1.discourse-cdn.com/inductiveautomation/original/3X/e/1/e192b17de2ec4c4cd80f12be0415a5a2fde0b6bb.png)

Calling the query using the "system.db.runScalarQuery" it works as aspected.

```auto
def Historian_Template_Props_by_Id(id):
	query = "SELECT props from historian_template where historian_template_id = %i " % (id)
	props = system.db.runScalarQuery(query, "RUB2_IG_Historian")
	return props

```

 ![image](https://us1.discourse-cdn.com/inductiveautomation/original/3X/8/6/86362c266168f4e8c19f82045741e7625a5ff70a.png)

---

<div class="post-metadata">

**Author:** ![JordanCClark](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/jordancclark/32/83362_2.png) [@JordanCClark](https://forum.inductiveautomation.com/u/JordanCClark)\
**Post date:** [December 4, 2023, 11:05am UTC](https://forum.inductiveautomation.com/t/scalar-named-query-by-script-return-empty-pydictionary/82636/2 "2023-12-04T11:05:10Z")

</div>

id is a python function. Avoid using it as a variable. What happens if you use something else?

```python
def nq_Historian_Template_Props_by_Id(idNum):
	nq = "RUB2/IG/Historian_Template_by_Plant"
	nq_par = {'Id':idNum}
	props = system.db.runNamedQuery(nq, nq_par)
	return props

```

---

<div class="post-metadata">

**Author:** ![code\_skin](https://avatars.discourse-cdn.com/v4/letter/c/43a26b/32.png) [@code\_skin](https://forum.inductiveautomation.com/u/code_skin)\
**Post date:** [December 4, 2023, 2:50pm UTC](https://forum.inductiveautomation.com/t/scalar-named-query-by-script-return-empty-pydictionary/82636/3 "2023-12-04T14:50:32Z")

</div>

Could it be your fallback?

 ![image](https://us1.discourse-cdn.com/inductiveautomation/original/3X/5/0/5060fece9318412e603ad85d57146800bf7f87fd.png)

---

<div class="post-metadata">

**Author:** ![tecnoeletronic](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/tecnoeletronic/32/50975_2.png) [@tecnoeletronic](https://forum.inductiveautomation.com/u/tecnoeletronic)\
**Post date:** [December 4, 2023, 3:23pm UTC](https://forum.inductiveautomation.com/t/scalar-named-query-by-script-return-empty-pydictionary/82636/4 "2023-12-04T15:23:02Z")

</div>

Hi, did not work 🥲

---

<div class="post-metadata">

**Author:** ![tecnoeletronic](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/tecnoeletronic/32/50975_2.png) [@tecnoeletronic](https://forum.inductiveautomation.com/u/tecnoeletronic)\
**Post date:** [December 4, 2023, 3:25pm UTC](https://forum.inductiveautomation.com/t/scalar-named-query-by-script-return-empty-pydictionary/82636/5 "2023-12-04T15:25:24Z")

</div>

Hi, I tried changing the return type and disabling the fallback, but with no luck..

---

<div class="post-metadata">

**Author:** ![paul-griffith](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/paul-griffith/32/37249_2.png) [@paul-griffith](https://forum.inductiveautomation.com/u/paul-griffith)\
**Post date:** [December 4, 2023, 5:55pm UTC](https://forum.inductiveautomation.com/t/scalar-named-query-by-script-return-empty-pydictionary/82636/6 "2023-12-04T17:55:46Z")

</div>

What DB are you using? MySQL, MSSQL, Postgres, etc? What's the exact column type - json? Can you try coercing the column into a string/varchar directly in your named query, e.g. `select cast(props, string)` in whatever syntax your DB provider wants for table coercion?

---

<div class="post-metadata">

**Author:** ![tecnoeletronic](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/tecnoeletronic/32/50975_2.png) [@tecnoeletronic](https://forum.inductiveautomation.com/u/tecnoeletronic)\
**Post date:** [December 4, 2023, 7:07pm UTC](https://forum.inductiveautomation.com/t/scalar-named-query-by-script-return-empty-pydictionary/82636/7 "2023-12-04T19:07:32Z")

</div>

Microsoft SQL  
NVarchar(max)

I’ve already tried the select-cast method before writing the original post..

---

<div class="post-metadata">

**Author:** ![tecnoeletronic](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/tecnoeletronic/32/50975_2.png) [@tecnoeletronic](https://forum.inductiveautomation.com/u/tecnoeletronic)\
**Post date:** [December 4, 2023, 7:09pm UTC](https://forum.inductiveautomation.com/t/scalar-named-query-by-script-return-empty-pydictionary/82636/8 "2023-12-04T19:09:26Z")

</div>

Same result with 8.1.34 version.

---

<div class="post-metadata">

**Author:** ![paul-griffith](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/paul-griffith/32/37249_2.png) [@paul-griffith](https://forum.inductiveautomation.com/u/paul-griffith)\
**Post date:** [December 4, 2023, 10:24pm UTC](https://forum.inductiveautomation.com/t/scalar-named-query-by-script-return-empty-pydictionary/82636/9 "2023-12-04T22:24:53Z")

</div>

We tried to mock this up internally and weren't able to reproduce. Can you confirm that the parameter name in your named query **exactly** matches the one in script (in your screenshots, they both appear to be `Id`, capital I, lowercase d, but I just want to make sure). You might also want to rename the parameter, in case `Id` is somehow being sent semantically to the DB and throwing an exception? I'm grasping at straws here.

You could also try putting the `NamedQueries.executor` logger on TRACE on the Gateway and running your query; it should log a clear message indicating that the fallback value was used due to an exception inside your query (in case that's somehow the problem).

I'd probably contact Support about this at this point, though - it's sufficiently "weird" that it could be a number of things, and it'll be a lot faster to troubleshoot an issue like that live with a support rep.

---

<div class="post-metadata">

**Author:** ![tecnoeletronic](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/tecnoeletronic/32/50975_2.png) [@tecnoeletronic](https://forum.inductiveautomation.com/u/tecnoeletronic)\
**Post date:** [December 4, 2023, 11:33pm UTC](https://forum.inductiveautomation.com/t/scalar-named-query-by-script-return-empty-pydictionary/82636/10 "2023-12-04T23:33:34Z")

</div>

Hi,

you were right. Thanks to your advice, I realized that the named query invoked was not the correct one due to our silly copy/paste error 🤬 ... i'm so sorry! thanks for the support!
