#!/usr/bin/env python,以下代码适用于Odoo10
from datetime import date
import subprocess, xmlrpclib, sys, os, psycopg2, pexpect
# Database info
db_user = 'odoo'
db_passwd = ''
db_host = 'localhost'
db_port = 5432
db_name = 'postgres'
oerp_conf = '/opt/odoo/odoo.conf'
oerp_bin = "/opt/odoo/odoo-bin"
module_to_upgrade = "module_to_upgrade"
today = date.today()
log_date = today.strftime('%Y%m%d')
log_name = "update-{}.log".format(log_date)
base_dir = os.getcwd()
with open(log_name, 'a+') as log_file:
# Get list of databases
db = psycopg2.connect(user= db_user,
password= db_passwd,
host= db_host,
port= db_port,
database= db_name)
cr = db.cursor()
cr.execute("select datname from pg_database where datdba=(select usesysid from pg_user where usename='{}') order by datname".format(db_user))
dblist = [str(name) for (name,) in cr.fetchall()]
for database in dblist:
# Wait for server to upgrade database, then kill it
print "Upgrading database {}...".format(database)
dbupdate_cmd = "{} shell -c {} --database={} --update={}".format(oerp_bin, oerp_conf, database, module_to_upgrade)
output = pexpect.spawn(dbupdate_cmd)
try:
# to catch this string loading.py was altered (line 461)
output.expect('.*Modules loaded.', timeout=600)
except pexpect.ExceptionPexpect as e:
print "Timeout reached while upgrading {}. Try manually upgrading the database with the command '{}'.".format(database, dbupdate_cmd)
output.kill(0)
status = "Upgraded database {}.".format(database)
print status
log_file.write(status + "\n")
以上代码来自:Soft29 blog: Odoo module upgrade on multiple databases