【问题标题】:Data not being saved in Postgresql using Python未使用 Python 将数据保存在 Postgresql 中
【发布时间】:2018-07-25 05:28:49
【问题描述】:

我正在尝试使用 Python 脚本将信息保存到 Postgresql 中的数据库中。 对于更一般的解释,我正在使用 Rails 制作一个 WebApp,在其中我调用一个作业来运行一个 python 脚本来处理一些图像和数据,之后,我希望将它们保存到我的数据库中。

其他事情,我正在将图像上传到 AWS S3,等待上传完成,然后再将信息保存到数据库中。

我用来上传信息的python代码如下:

# Function which connects wit postgresql and uploads into the database
#....(Asume param and model_id are known variables, which i do not post it here.) 

def insert_param(param, model_id):
    con = None
    try:
        con = psycopg2.connect("host='localhost' 
                               dbname='app_development' 
                               user='usr' 
                               password=''")
        wait(con)
        cur = con.cursor()
        cur.execute("UPDATE M_Param SET Model=%s WHERE Id=%s",(param, model_id))
        con.commit()

    except Exception, e:
         print  e
         if con:
            con.rollback()

        print 'Error %s' % e
        sys.exit(1)

    finally:   
        if con:
            con.close()

#Function which wait for the connection to the database to be ready.
def wait(conn):
    while 1:
        state = conn.poll()
        if state == psycopg2.extensions.POLL_OK:
            print "Poll Conection OK"
            break
        elif state == psycopg2.extensions.POLL_WRITE:
            print "Poll writting"
            select.select([], [conn.fileno()], [])
        elif state == psycopg2.extensions.POLL_READ:
            print "Poll reading"
            select.select([conn.fileno()], [], [])
        else:
            raise psycopg2.OperationalError("poll() returned %s" % state)

#Here I call the first function
insert_count(param,model_id)

有时我在将数据上传到 postgresql 时遇到问题,随机情况下信息未上传。 在它提交之后,我尝试从数据库中获取数据,但我什么也没得到,也没有从这些尝试中得到有价值的信息。

这是我的问题:

  • 我保存信息并将信息提交到数据库的方式有问题吗?
  • 在继续运行更多代码之前,我是否需要等待提交使用一些回调返回“ok”状态?

非常欢迎任何帮助、参考或反馈。

【问题讨论】:

    标签: python database postgresql


    【解决方案1】:

    我发现了问题,不是python代码,而是python脚本的执行方式

    当我调用python脚本时,调用了解释器,但是在python任务完成之前我已经再次调用了脚本,这使得解释器关闭并重新打开,而不是让之前的任务完成(ergo,不是提交到数据库)。

    避免此问题的一些可能方法是:

    • 在列表中将不同的任务排队到另一个服务器中始终运行的 python 脚本。
    • 使用sidekiq Gem 使所有python 脚本在不同的线程中运行。 (或其他一些后端线程方法)

    我希望这个发现可以帮助与我处于相同位置的其他人。

    【讨论】:

      猜你喜欢
      • 2017-04-04
      • 2017-06-18
      • 2021-08-12
      • 1970-01-01
      • 2021-02-07
      • 2020-01-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多