2012-07-15 18 views
9

पर सीधे अपलोड करने के लिए ओपनईआरपी ओआरएम का उपयोग करने वाली पाइथन स्क्रिप्ट कैसे लिखें, मुझे केवल ओपनईआरपी के ओआरएम मॉड्यूल का उपयोग करके डेटाबेस में खाता_टैक्स तालिका में बिक्री कर अपलोड करने के लिए पायथन में "स्टैंडअलोन" स्क्रिप्ट लिखनी होगी। मैं क्या करना चाहता हूं नीचे छद्म कोड की तरह कुछ है।पोस्टग्रेस डेटाबेस

क्या कोई मुझे निम्नलिखित पर अधिक जानकारी प्रदान कर सकता है: 1) क्या sys.path मुझे सेट करने की आवश्यकता है 2) "खाता" मॉड्यूल आयात करने से पहले मुझे आयात करने के लिए कौन से मॉड्यूल की आवश्यकता है। वर्तमान में जब मैं "खाता" मॉड्यूल आयात करता हूं तो मुझे निम्न त्रुटि मिलती है: AssertionError: रिपोर्ट "report.custom" पहले से मौजूद है! 3) मेरा डेटाबेस कर्सर प्राप्त करने का सही तरीका क्या है। नीचे दिए गए कोड में मैं बस कर्सर प्राप्त करने के लिए सीधे psycopg2 को बुला रहा हूं।

यदि यह दृष्टिकोण काम नहीं कर सकता है, तो क्या कोई भी ओपनईआरपी एप्लिकेशन से डेटा लोड करने के लिए एक्सएमएल फाइलों को लिखने के अलावा वैकल्पिक दृष्टिकोण सुझा सकता है। इस प्रक्रिया को मानक ओपनईआरपी आवेदन के बाहर चलाने की जरूरत है।

छद्म कोड:

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. 
+0

हाय टिम आप मॉड्यूल के रूप में केवल ORM उपयोग करना चाहते हैं या आप चाहते हैं ँ सेवा करने के लिए यूआई का उपयोग किए बिना डेटा डालें ??? –

उत्तर

1

आप OpenERP की xmlrpc कॉल क्यों प्रयोग नहीं करते। इसे खाता या ओपनरप आयात करने की आवश्यकता नहीं होगी। और यहां तक ​​कि आप सभी ओआरएम कार्यक्षमता हो सकती है।

18

आप चाहते हैं वेब सेवा के माध्यम से यह करना तो OpenERP वेब सेवा के साथ OpenERP XML-RPC Web services

उदाहरण कोड शीर्ष काम पर नजर है:

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 Client lib उदाहरण कोड का उपयोग कर सकते ग्राहक lib:

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"] 

आप दोनों तरह से अच्छे हैं लेकिन जब आप ग्राहक का उपयोग करते हैं ib, कोड कम है और समझने में आसान है xmlrpc प्रॉक्सी का उपयोग करते हुए निम्न स्तर की कॉल है जो आप को संभालेंगे आशा है कि यह आपकी मदद करेगा।

+0

सहायता के लिए धन्यवाद। Openerplib का उपयोग करने में, क्या सादा ओले एसक्यूएल स्टेटमेंट के साथ डेटाबेस से पूछताछ करने का कोई तरीका है? यदि हां, तो क्या SQL कर्सर को निष्पादित करने के लिए डेटाबेस कर्सर प्राप्त करने का कोई तरीका है? –

+1

हैलो, टिम कुछ वेब सेवा का उपयोग करके आप सीधे एसक्यूएल ट्रिगर को कॉल नहीं कर सकते हैं लेकिन उनका हमेशा तरीका है। कुछ मॉडल में आप एसक्यूएल ट्रिगर्स के साथ फ़ंक्शन लिखते हैं तो मॉडल सेवा का उपयोग करके आप उस फ़ंक्शन को ट्रिगर कर सकते हैं जो एसक्यूएल को ट्रिगर करता है। –

+0

मुझे डेटाबेस का नाम कैसे पता चलेगा? – guaka

1

मेरे विचार के अनुसार किसी को ऐसी आवश्यकताओं के लिए ओपन ईआरपी द्वारा प्रदान की गई XMLRPC या NETSVC सेवाओं के लिए जाना चाहिए।

आपको ओपन ईआरपी के accounts मॉड्यूल आयात करने की आवश्यकता नहीं है, ऐसी संभावनाएं हैं कि अन्य मॉड्यूल में accounts.tax ऑब्जेक्ट विरासत में मिला है और आपकी व्यावसायिक आवश्यकताओं के अनुसार अपना व्यवहार बदल गया है।

आखिरकार यदि आप ओपन ईआरपी Web service का उपयोग किए बिना मैन्युअल रूप से उन तरीकों को कॉल करके डेटा खिलाते हैं तो आपको अवांछित परिणाम/अप्रत्याशित विफलताओं/असंगत डेटाबेस स्थिति मिल जाएगी।

1

आप डेटा ब्राउज़ करने के लिए Erppeek उपयोग कर सकते हैं, लेकिन यकीन नहीं क्या तुम सच में डीबी के लिए डेटा अपलोड कर सकते हैं, व्यक्तिगत रूप से मैं/का उपयोग XMLRPC

0

चाहें तो आप xmlrpc सेवा का उपयोग कर OpenERP सर्वर तक पहुँचने के लिए अजगर लाइब्रेरी का उपयोग कर सकते हैं। कृपया https://github.com/OpenERP/openerp-client-lib

आधिकारिक तौर पर ओपनरपी एसए द्वारा समर्थित है।

0

आप डीबी के साथ सीधे interacti करना चाहते हैं, तो आप कर सकते थे बस आयात 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() 
0

तुम क्यों इस तरह इसे ठीक करना चाहते हैं ?! आपको स्थानीयकरण मॉड्यूल बनाना चाहिए और XML फ़ाइलों में डेटा को परिभाषित करना चाहिए। OpenERP में ऐसी समस्या को ठीक करने का यह मानक तरीका है।

आप किस देश के लिए बिक्री कर डालना चाहते हैं? अधिक plz समझाओ।

-1
openerp.modules.registry आयात RegistryManager से


रजिस्ट्री = RegistryManager.get करोड़ के रूप में ("databasename")
registry.cursor साथ():
          उपयोगकर्ता = registry.get ('रेस .users ')। ब्राउज़ (करोड़, उपयोगकर्ता आईडी, listids)
          प्रिंट उपयोगकर्ता

संबंधित मुद्दे