Dp Data Mapper
DodaTech
1 min read
In this tutorial, you'll learn about How to Fix Data Mapper Errors. We cover key concepts, practical examples, and best practices.
Fix data mapper errors when business objects depend on database schema or raw SQL everywhere.
Quick Fix
Wrong
class User:
def __init__(self,row):
self.id=row['id']; self.name=row['name']
def save(self):
db.execute(f'UPDATE users SET name="{self.name}" WHERE id={self.id}')
SQL injection. Domain object knows SQL. Schema changes break domain objects.
Right
from abc import ABC,abstractmethod
class User:
def __init__(self,name): self.name=name; self.id=None
def change_name(self,n): self.name=n
class UserMapper:
def __init__(self,conn): self.conn=conn
def insert(self,user):
cur=self.conn.execute('INSERT INTO users(name) VALUES(?) RETURNING id',(user.name,))
user.id=cur.fetchone()[0]
def update(self,user):
self.conn.execute('UPDATE users SET name=? WHERE id=?',(user.name,user.id))
def find(self,uid):
row=self.conn.execute('SELECT id,name FROM users WHERE id=?',(uid,)).fetchone()
u=User(row[1]); u.id=row[0]; return u
conn=sqlite3.connect(':memory:')
mapper=UserMapper(conn); u=User('Bob'); mapper.insert(u); u.change_name('Robert'); mapper.update(u)
Domain objects pure Python. Mapper handles persistence. SQL injection safe via parameters.
Prevention
Data Mapper isolates domain from persistence. Pure domain model. All SQL in mapper layer.
DodaTech Tools
Doda Browser's algorithm visualizer steps through DSA operations line by line. DodaZIP archives implementation patterns for team sharing. Durga Antivirus Pro detects memory corruption patterns in algorithm implementations.
FAQ
Built by the developers of DodaTech
Doda Browser, DodaZIP & Durga Antivirus Pro