9

我需要在 Python 中编写一个“独立”脚本,仅使用 OpenERP 的 ORM 模块将销售税上传到数据库中的 account_tax 表。我想做的是类似于下面的伪代码。

有人可以向我提供有关以下内容的更多详细信息:1)我需要设置什么 sys.path 2)在导入“帐户”模块之前我需要导入哪些模块。目前,当我导入“帐户”模块时,我收到以下错误:AssertionError:报告“report.custom”已经存在!3)获取我的数据库游标的正确方法是什么。在下面的代码中,我只是直接调用 psycopg2 来获取游标。

如果这种方法行不通,除了编写 XML 文件来从 OpenERP 应用程序本身加载数据之外,任何人都可以提出替代方法。这个过程需要在标准 OpenERP 应用程序之外运行。

伪代码:

import sys
# set Python paths to access openerp modules
sys.path.append("./openerp")
sys.path.append("./openerp/addons")

# import OpenERP 
import openerp

# import the account addon modules that contains the tables 
# to be populated.
import account

# define connection string
conn_string2 = "dbname='test2' user='xyz' password='password'"

# get a db connection
conn = psycopg2.connect(conn_string2)

# conn.cursor() will return a cursor object
cursor = conn.cursor()

# and finally use the ORM to insert data into table.
4

8 回答 8

17

如果你想通过网络服务来做,那么看看 OpenERP XML-RPC Web 服务

示例代码顶部与 OpenERP Web 服务一起使用:

import xmlrpclib

username = 'admin' #the user
pwd = 'admin'      #the password of the user
dbname = 'test'    #the database

# OpenERP Common login Service proxy object 
sock_common = xmlrpclib.ServerProxy ('http://localhost:8069/xmlrpc/common')
uid = sock_common.login(dbname, username, pwd)

#replace localhost with the address of the server
# OpenERP Object manipulation service 
sock = xmlrpclib.ServerProxy('http://localhost:8069/xmlrpc/object')

partner = {
   'name': 'Fabien Pinckaers',
   'lang': 'fr_FR',
}
#calling remote ORM create method to create a record 
partner_id = sock.execute(dbname, uid, pwd, 'res.partner', 'create', partner)

更清楚地说,您还可以将OpenERP 客户端库 示例代码与客户端库一起使用:

import openerplib

connection = openerplib.get_connection(hostname="localhost", database="test", \
    login="admin", password="admin")
user_model = connection.get_model("res.users")
ids = user_model.search([("login", "=", "admin")])
user_info = user_model.read(ids[0], ["name"])
print user_info["name"]

您看到两种方式都很好,但是当您使用客户端库时,代码较少且易于理解,而使用 xmlrpc 代理是您将处理的较低级别的调用希望这会对您有所帮助。

于 2012-07-16T07:14:51.827 回答
1

您可以使用Erppeek浏览数据,但不确定您是否真的可以将数据上传到 DB,我个人使用/更喜欢 XMLRPC

于 2013-12-23T06:46:29.923 回答
1

为什么不使用 openerp 的 xmlrpc 调用。它不需要导入 account 或 openerp 。甚至你可以拥有所有的 orm 功能。

于 2012-07-16T07:11:13.123 回答
1

根据我的观点,必须使用 Open ERP 提供的服务来满足此类需求 XMLRPCNETSVC

您不需要导入accountsOpen ERP 的模块,其他模块有可能继承了accounts.tax对象并根据您的业务需要改变了它的行为。

最终,如果您通过手动调用这些方法而不使用 Open ERP 来提供数据,您Web service可能会得到不希望的结果/意外故障/不一致的数据库状态。

于 2012-08-08T07:32:18.567 回答
0

您可以使用 python 库通过 xmlrpc 服务访问 openerp 服务器。请查看https://github.com/OpenERP/openerp-client-lib

它由 OpenERP SA 正式支持。

于 2014-01-18T07:51:03.600 回答
0

如果您想直接与数据库交互,您可以导入 psycopg2并:

conn = psycopg2.connect(dbname='dbname', user='dbuser', password='dbpassword', host='dbhost')
cur = conn.cursor()
cur.execute('select * from table where id = %d' % table_id)
cur.execute('insert into table(column1, column2) values(%d, %d)' % (value1, value2))
cur.close()
conn.close()
于 2014-05-12T02:53:39.057 回答
-1

为什么要这样修?!您应该创建一个本地化模块并在XML 文件中定义数据。这是在 OpenERP 中解决此类问题的标准方法。

您想为哪个国家/地区插入销售税?请解释更多。

于 2014-06-15T16:25:31.087 回答
-1

从 openerp.modules.registry 导入 RegistryManager
registry = RegistryManager.get("databasename")
with registry.cursor() as cr:
      user = registry.get('res.users').browse(cr, userid, listids)
      打印用户

于 2015-03-23T08:42:30.387 回答