2

I am trying to create an ".app" from Automator to run a simple python script. When I execute the script in Automator an error occurs saying more or less "Check your action properties and execute again".

And in the history it says "Traceback (most recent call last:)". The point is that this script is running well with a Terminal session.

It seems to be at least an error with my loop "While" for renaming databases (see below) since I can execute the script up to this stage.
Is it something wrong with managing sqlite databases? But I cannot understand since there is no problem with the Terminal. Is anything missing?

My python script:

#!/usr/bin/python

import sqlite3
import os.path

file_name = "newDB.data"
choice = ""

if os.path.isfile(file_name):
    choice = raw_input("Erase DB? press [y] or [n]:\n")

if choice == "y":
    print "erase"

    while True: 
        try:
            os.remove(file_name)
            break

    except OSError as e: # name the Exception `e`
        print "Failed with:", e.strerror # look what it says
        print "Error code:", e.code 

if choice == "n":
    print "Bye!"
    exit() 


# start sqlite connection
conn = sqlite3.connect("newDB.data")
c = conn.cursor()


# attach
c.execute("ATTACH database 'store1.data' AS db1")
c.execute("ATTACH database 'store2.data' AS db2")


# rename tables
while True:
    try:
        c.execute("ALTER TABLE db1.ZPATIENT RENAME TO table1")
        print "table 1 renamed"
        break

    except:
        c.execute("ALTER TABLE db1.table1 RENAME TO ZPATIENT")
        print "except 1"


while True:
    try:
        c.execute("ALTER TABLE db2.ZPATIENT RENAME TO table2")
        print "table 2 renamed"
        break

    except:
        c.execute("ALTER TABLE db2.table2 RENAME TO ZPATIENT")
        print "except 2"


# some information commands (START):
c.execute("SELECT * from table1")
print(c.fetchall())
c.execute("SELECT * from table2")
print(c.fetchall())
# some information commands (END)


#c.execute("create table ZPATIENT as select * from table1 union select * from table2") ---> first union action but some entries duplicated (one column changed?)

# remove some duplicated entries...
c.execute("create table ZPATIENT as select * from (select * from table1 union select * from table2) final group by ZDATECREATED")
c.execute("CREATE TABLE Z_PRIMARYKEY (Z_ENT int, Z_NAME text, Z_SUPER int, Z_MAX int)")
c.execute("CREATE TABLE Z_METADATA (Z_VERSION int, Z_UUID text, Z_PLIST BLOB)")

c.execute("SELECT count(*) FROM ZPATIENT")
result=c.fetchone()
number_of_rows=result[0]
print number_of_rows
start = 0
end = number_of_rows + 1

c.execute('SELECT * FROM ZPATIENT') 
newresult=c.fetchall()

for row in newresult:

    start += 1
    end -= 1
    print start
    print end

    # some information commands (START):
    list_of_tuple = list(row)
    list_of_tuple[0] = start
    list_of_tuple[2] = end
    row = tuple(list_of_tuple)
    print row
    # some information commands (END)

    c.execute("UPDATE ZPATIENT SET Z_PK = ? WHERE rowid = ?", (start, start))
    c.execute("UPDATE ZPATIENT SET Z_OPT = ? WHERE rowid = ?", (end, start))


c.execute("INSERT INTO Z_PRIMARYKEY (Z_ENT, Z_NAME, Z_SUPER, Z_MAX) VALUES (0, 'Patient', 0, ?)", (start,))

# close
conn.commit()
conn.close()

To be working I have two sqlite databases named store1.data and store2.data in the same folder...

If anyone has a solution... I don't know if maybe there is an easier way to execute this in one click?

0

1 Answer 1

1

One simple solution could be to avoid using automator and just make a bash script to call the python script. You can execute the bash script by double-clicking on it if that's what you wanted.

#! /bin/bash

python scriptname.py

is all you would need.

Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.