gallery-image

we are here

3938 Somerset Circle Rochester Hills MI 48309

Transferring data from Odoo 16 to Odoo 18 using XML-RPC involves several steps. XML-RPC is a protocol that allows communication between Odoo instances via remote procedure calls.

1. Prepare Source (Odoo 16) and Target (Odoo 18) Instances

  • Ensure both instances are accessible and running.
  • Confirm that the models and fields in Odoo 18 match or are adjusted for compatibility with Odoo 16.

2. Install Required Libraries

In Python, you’ll need the xmlrpc.client library. Install it if necessary:

bash

pip install xmlrpc

3. Connect to Odoo Instances

Use xmlrpc.client to connect to both Odoo 16 (source) and Odoo 18 (target).

Example:

python

import xmlrpc.client

# Source (Odoo 16)

url_16 = ‘http://odoo16.example.com’

db_16 = ‘odoo16_db’

username_16 = ‘admin’

password_16 = ‘admin’

common_16 = xmlrpc.client.ServerProxy(f'{url_16}/xmlrpc/2/common’)

uid_16 = common_16.authenticate(db_16, username_16, password_16, {})

models_16 = xmlrpc.client.ServerProxy(f'{url_16}/xmlrpc/2/object’)

# Target (Odoo 18)

url_18 = ‘http://odoo18.example.com’

db_18 = ‘odoo18_db’

username_18 = ‘admin’

password_18 = ‘admin’

common_18 = xmlrpc.client.ServerProxy(f'{url_18}/xmlrpc/2/common’)

uid_18 = common_18.authenticate(db_18, username_18, password_18, {})

models_18 = xmlrpc.client.ServerProxy(f'{url_18}/xmlrpc/2/object’)

4. Fetch Data from Odoo 16

Use the search_read method to retrieve records.

Example:

python

records = models_16.execute_kw(db_16, uid_16, password_16,

‘res.partner’, ‘search_read’,  # Model and method [[]],

# Domain to filter records

{‘fields’: [‘name’, ’email’, ‘phone’], ‘limit’: 100})  # Specify fields and limit

print(records)

5. Insert Data into Odoo 18

Use the create method to insert data into the target instance.

Example:

python

for record in records:

data = {

‘name’: record[‘name’],

’email’: record[’email’],

‘phone’: record[‘phone’],

}

models_18.execute_kw(db_18, uid_18, password_18,

‘res.partner’, ‘create’, [data])

6. Map and Transform Data

If fields differ between versions, transform the data accordingly. For example:

  • Rename or merge fields.
  • Handle relationships (e.g., Many2One, One2Many) by fetching related records’ IDs and mapping them.

Example for Many2One Field:

python

# Fetch related record ID from Odoo 18

country_id = models_18.execute_kw(db_18, uid_18, password_18,

‘res.country’, ‘search’, [[[‘name’, ‘=’, record[‘country_id’][1]]]])

# Include the ID in the data dictionary

data[‘country_id’] = country_id[0] if country_id else False

7. Handle Errors

Use try-except blocks to handle errors gracefully, log issues, and continue with the next record.

Example:

python

for record in records:

try:

data = {‘name’: record[‘name’], ’email’: record[’email’]}

models_18.execute_kw(db_18, uid_18, password_18, ‘res.partner’, ‘create’, [data])

except Exception as e:

print(f”Error transferring record {record[‘id’]}: {e}”)

8. Validate Data Migration

  • Compare record counts between Odoo 16 and Odoo 18.
  • Verify data integrity manually or using automated scripts.

9. Automate for Larger Datasets

For large datasets, implement batch processing and schedule jobs to avoid overloading the server.

Example: Batch Processing

python

Copy code

batch_size = 100

offset = 0

while True:

records = models_16.execute_kw(db_16, uid_16, password_16,

‘res.partner’, ‘search_read’,

[[], {‘fields’: [‘name’, ’email’], ‘limit’: batch_size, ‘offset’: offset}])

if not records:

break  # Exit loop when no more records

for record in records:

try:

models_18.execute_kw(db_18, uid_18, password_18, ‘res.partner’, ‘create’, [record])

except Exception as e:

print(f”Error: {e}”)

offset += batch_size

10. Optimize Performance

  • Use bulk create if supported.
  • Minimize the number of API calls by grouping operations.

 

Write a comment

Your email address will not be published. Required fields are marked *

Enter Name*
Enter Email*
Enter Website*
Enter Your Comment*

Select the fields to be shown. Others will be hidden. Drag and drop to rearrange the order.
  • Image
  • SKU
  • Rating
  • Price
  • Stock
  • Availability
  • Add to cart
  • Description
  • Content
  • Weight
  • Dimensions
  • Additional information
Click outside to hide the comparison bar
Compare