9
votes

Comment rédiger un script Python qui utilise l'Openerp ORM pour télécharger directement sur la base de données Postgres

J'ai besoin d'écrire un script "autonome" dans Python pour télécharger des taxes de vente à la table de comptes_tax dans la base de données en utilisant uniquement le module ORM d'OpenerP. Ce que j'aimerais faire, c'est quelque chose comme le pseudo code ci-dessous.

Quelqu'un peut-il me fournir plus de détails sur ce qui suit: 1) Qu'est-ce que je dois définir 2) Quels modules dois-je importer avant d'importer le module "Compte". Actuellement, lorsque j'importe le module "Compte", j'obtiens l'erreur suivante: AssertionError: Le rapport "Report.custom" existe déjà! 3) Quelle est la bonne façon d'obtenir mon curseur de base de données. Dans le code ci-dessous, j'appelle simplement Psycopg2 directement pour obtenir un curseur. P>

Si cette approche ne peut pas fonctionner, quelqu'un peut-il suggérer une approche alternative autre que d'écrire des fichiers XML pour charger les données de l'application Openerp elle-même. Ce processus doit fonctionner en dehors de l'application Standard Openerp. P>

Code pseudo: P>

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.


1 commentaires

Salut Tim Vous souhaitez utiliser uniquement ORM comme module ou que vous souhaitez que le service OE soit insérer des données sans utiliser UI ???


8 Réponses :


1
votes

Pourquoi n'utilisez-vous pas l'appel XMLRPC d'Openerp. Il n'aura pas besoin d'importer un compte ni d'ouvrir. et même vous pouvez avoir toutes les fonctionnalités ORM.


0 commentaires

17
votes

Si vous voulez le faire via un service Web, alors consultez le Openerp XML-RPC Web Services

Exemple de code Top travail avec openerp Web Services: P>

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


3 commentaires

Merci pour l'aide. En utilisant OpenerPlib, est-il un moyen d'interroger la base de données avec des relevés de SQL Ole SQL? Si tel est le cas, est-il un moyen d'obtenir le curseur de base de données sur lequel exécuter la requête SQL?


Bonjour, Tim à l'aide d'un service Web Vous ne pouvez pas appeler directement le déclencheur SQL mais que leur est toujours un moyen de sortir. Dans certains modèles, vous écrivez la fonction avec les déclencheurs SQL, puis utilisez le service de modèle que vous pouvez déclencher la fonction qui déclenche le SQL.


Comment puis-je trouver le nom de la base de données?



1
votes

Selon mon affichage, il faut aller pour xmlrpc ou netsvc services fournis par Open ERP pour de tels besoins.

Vous n'avez pas besoin d'importer Comptes de l'ERP ouvert, il existe des possibilités que d'autres modules ont hérité d'objet comptes.tax et avaient modifié son comportement selon votre les besoins de l'entreprise.

Finalement, si vous nourrissez des données en appelant ces méthodes manuellement sans utiliser OPEN ERP Web Service STI est possible, vous obtiendrez des résultats indésirables / Échecs inattendus / State de base de données incohérente.


0 commentaires

1
votes

Vous pouvez utiliser ERPPek pour parcourir les données, mais pas sûr si vous pouvez vraiment télécharger des données à dB, personnellement, j'utilise / préfère XMLRPC


0 commentaires

0
votes

Vous pouvez utiliser Python Bibliothèque pour accéder à Openerp Server à l'aide du service XMLRPC. Veuillez vérifier https://github.com/openerp/openerp-client-lib

Il est officiellement pris en charge par Openerp SA.


0 commentaires

0
votes

Si vous voulez interagir directement avec la base de données, vous pouvez simplement importer psycopg2 et: xxx


0 commentaires

-1
votes

Pourquoi vous voulez le réparer comme ça ?! Vous devriez créer un module de localisation et définir des données dans fichiers XML . C'est la façon standard de résoudre un tel problème dans Openerp.

Vous voulez insérer des taxes de vente pour quel pays? Expliquez plus PLZ.


0 commentaires

-1
votes

à partir d'openerp.modules.registry Importer RegistryManager
registre = registrymanager.get ("Databasename")
avec registre.cursor () comme Cr:
Utilisateur = registre.get ('res.utilisateurs'). Parcourir (Cr, Userid, Listids)
Print utilisateur


0 commentaires