Update query scripting

this query runs fine in query browser

UPDATE DEVICESETTINGS SET DESCRIPTION = 'adfasfasdfdsaf' WHERE name = 'AmJE01'

but when i try to run the same thing in the script console

updatequery = "UPDATE DEVICESETTINGS SET DESCRIPTION = ? WHERE name = ?"
args = ["adfasfasdfdsaf","AmJE01"]
database = "IgnitionPostgresDB"
system.db.runPrepQuery(updatequery, args, database)

I get all kinds of errors.

use runPrepUpdate instead.

and use the code formatting tool when you want to post code:

image

edit:
also:

That might also be something to look into, but I ain't trying to debug non-formatted code.

4 Likes

Changed script to use runPrepUpdate

query = "UPDATE DEVICESETTINGS SET DESCRIPTION = ? WHERE name = ?"
args = ['adfasfasdfdsaf', 'AmJE01']
system.db.runPrepUpdate(query, args)

and I'm still getting errors

Java Traceback:
Traceback (most recent call last):
  File "<input>", line 3, in <module>
	at com.inductiveautomation.ignition.common.script.builtin.AbstractDBUtilities.error(AbstractDBUtilities.java:392)

	at com.inductiveautomation.ignition.common.script.builtin.AbstractDBUtilities.runPrepUpdate(AbstractDBUtilities.java:268)

	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)

	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)

	at java.base/java.lang.reflect.Method.invoke(Unknown Source)

java.lang.Exception: java.lang.Exception: Error executing system.db.runPrepUpdate(UPDATE DEVICESETTINGS SET DESCRIPTION = ? WHERE name = ?, [adfasfasdfdsaf, AmJE01], , , false, false)


	at org.python.core.Py.JavaError(Py.java:547)

	at com.inductiveautomation.ignition.common.script.builtin.AbstractDBUtilities.error(AbstractDBUtilities.java:392)

	at com.inductiveautomation.ignition.common.script.builtin.AbstractDBUtilities.runPrepUpdate(AbstractDBUtilities.java:268)

	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)

	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)

	at java.base/java.lang.reflect.Method.invoke(Unknown Source)

	at org.python.core.PyReflectedFunction.__call__(PyReflectedFunction.java:190)

	at com.inductiveautomation.ignition.common.script.ScriptManager$ReflectedInstanceFunction.__call__(ScriptManager.java:549)

	at org.python.core.PyObject.__call__(PyObject.java:477)

	at org.python.core.PyObject.__call__(PyObject.java:481)

	at org.python.pycode._pyx39.f$0(<input>:3)

	at org.python.pycode._pyx39.call_function(<input>)

	at org.python.core.PyTableCode.call(PyTableCode.java:173)

	at org.python.core.PyCode.call(PyCode.java:18)

	at org.python.core.Py.runCode(Py.java:1687)

	at org.python.core.Py.exec(Py.java:1731)

	at org.python.util.PythonInterpreter.exec(PythonInterpreter.java:277)

	at org.python.util.InteractiveInterpreter.runcode(InteractiveInterpreter.java:130)

	at com.inductiveautomation.ignition.designer.gui.tools.jythonconsole.JythonConsole$ConsoleWorker.doInBackground(JythonConsole.java:611)

	at com.inductiveautomation.ignition.designer.gui.tools.jythonconsole.JythonConsole$ConsoleWorker.doInBackground(JythonConsole.java:599)

	at java.desktop/javax.swing.SwingWorker$1.call(Unknown Source)

	at java.base/java.util.concurrent.FutureTask.run(Unknown Source)

	at java.desktop/javax.swing.SwingWorker.run(Unknown Source)

	at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)

	at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)

	at java.base/java.lang.Thread.run(Unknown Source)

Caused by: java.lang.Exception: Error executing system.db.runPrepUpdate(UPDATE DEVICESETTINGS SET DESCRIPTION = ? WHERE name = ?, [adfasfasdfdsaf, AmJE01], , , false, false)

	... 26 more

Caused by: com.inductiveautomation.ignition.client.gateway_interface.GatewayException: Cannot run this function when in read-only mode.

	at com.inductiveautomation.ignition.client.gateway_interface.GatewayInterface.getResponse(GatewayInterface.java:384)

	at com.inductiveautomation.ignition.client.gateway_interface.GatewayInterface.sendMessage(GatewayInterface.java:283)

	at com.inductiveautomation.ignition.client.gateway_interface.GatewayInterface.sendMessage(GatewayInterface.java:278)

	at com.inductiveautomation.ignition.client.script.ClientDBUtilities._runPrepStmt(ClientDBUtilities.java:288)

	at com.inductiveautomation.ignition.common.script.builtin.AbstractDBUtilities.runPrepUpdate(AbstractDBUtilities.java:261)

	... 24 more

Traceback (most recent call last):
  File "<input>", line 3, in <module>
	at com.inductiveautomation.ignition.common.script.builtin.AbstractDBUtilities.error(AbstractDBUtilities.java:392)

	at com.inductiveautomation.ignition.common.script.builtin.AbstractDBUtilities.runPrepUpdate(AbstractDBUtilities.java:268)

	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)

	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)

	at java.base/java.lang.reflect.Method.invoke(Unknown Source)

java.lang.Exception: java.lang.Exception: Error executing system.db.runPrepUpdate(UPDATE DEVICESETTINGS SET DESCRIPTION = ? WHERE name = ?, [adfasfasdfdsaf, AmJE01], , , false, false)

click on this icon:
image
to set write mode.

or in the project menu:
image

5 Likes

Still getting

Caused by: com.inductiveautomation.ignition.client.gateway_interface.GatewayException: SQL error for "UPDATE DEVICESETTINGS SET DESCRIPTION = ? WHERE name = ?": ERROR: relation "devicesettings" does not exist

When running this query

update DEVICESETTINGS set DESCRIPTION='asdfasdfsadfsa' where NAME='AmJE01'

at this igntion page

http://x.x.x.x/web/status/sys.internaldb

But when i run the same query in perspective using the query browser I get the errors. After looking at the tables listed in the Perspective query browser DEVICESETTINGS is not listed, I think my issue is that I'm querying the wrong database.

Is there a separate database which stores DEVICESETTINGS vs what the script console sees?

I feel like we've gotten way off course here. What are we actually trying to accomplish with this approach? I'm certain that if we understood that, we could guide you better. It also seems probable that we could do it without a query.

I'm trying to update the device descriptions using scripting

Forgive me, but for some reason this just isn't clicking in my brain. Can you give me a specific example?

I want to be able to update this Description column using scripting

Dynamically? Do you actually need that?
Why are you trying to do so via the web interface/what lead you to think that was a good idea?

If this is a one-time operation for setting up a system, perhaps system.device.addDevice covers your needs?

3 Likes

I only need it once. I looked at trying to add it during the system.device.addDevice command, but looking at the system.device.addDevice - deviceProps Listing, I don't see a property to set the Description property?

Note: The Description and Enabled properties may not be configured with this function, although a device connection could be disabled with a call to system.device.setDeviceEnabled() after creating the connection.

womp womp

edit: I don't think that's accurate though, looking at the implementation it seems the "description" key would be used.

So my new props looks like

nameID="AmAE01"
newProps = {"hostname":"172.16.24.90","port":502,"description":"bleh"}
system.device.addDevice(deviceType="ModbusTcp",deviceName=nameID,deviceProps=newProps)

it doesn't fill in description setings

Try it as a named argument to addDevice, not part of the props dictionary.

edit: it's even documented! system.device.addDevice - Ignition User Manual 8.1 - Ignition Documentation

2 Likes