Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How can I save an python object on a MySQL database?

I'm trying to create a database using an example of an object from python, but I'm getting errors messages like: "AttributeError: 'Eu' object has no attribute 'translate'" I have no idea how to fix that

sorry guys my english is not very good here's my code:

import pymysql.cursors


class Eu:
    def __init__(self, nome='mel', idade=22):
        self.nome = nome
        self.idade = idade


eu = Eu()
nome = eu.nome
idade = eu.idade


# connect do database
conn = pymysql.connect(host='localhost',
                       user='root',
                       password='')

# create a cursor and a database
conn.cursor().execute('CREATE DATABASE banco73') 
conn.cursor().execute('USE banco73')

# create tables
conn.cursor().execute('CREATE TABLE tabela73 (eu BLOB)')

# use tables
conn.cursor().execute("""INSERT INTO tabela73 VALUES (?)""", (eu))

the entire console message:

runfile('C:/Users/Usuario/.spyder-py3/temp.py', wdir='C:/Users/Usuario/.spyder-py3')
Traceback (most recent call last):

  File "<ipython-input-59-9994dddea11c>", line 1, in <module>
    runfile('C:/Users/Usuario/.spyder-py3/temp.py', wdir='C:/Users/Usuario/.spyder-py3')

  File "C:\Users\Usuario\Anaconda3\lib\site-packages\spyder\utils\site\sitecustomize.py", line 880, in runfile
    execfile(filename, namespace)

  File "C:\Users\Usuario\Anaconda3\lib\site-packages\spyder\utils\site\sitecustomize.py", line 102, in execfile
    exec(compile(f.read(), filename, 'exec'), namespace)

  File "C:/Users/Usuario/.spyder-py3/temp.py", line 36, in <module>
    conn.cursor().execute("""INSERT INTO tabela73 VALUES (?)""", (eu))

  File "C:\Users\Usuario\Anaconda3\lib\site-packages\pymysql\cursors.py", line 168, in execute
    query = self.mogrify(query, args)

  File "C:\Users\Usuario\Anaconda3\lib\site-packages\pymysql\cursors.py", line 147, in mogrify
    query = query % self._escape_args(args, conn)

  File "C:\Users\Usuario\Anaconda3\lib\site-packages\pymysql\cursors.py", line 133, in _escape_args
    return conn.escape(args)

  File "C:\Users\Usuario\Anaconda3\lib\site-packages\pymysql\connections.py", line 839, in escape
    return converters.escape_item(obj, self.charset, mapping=mapping)

  File "C:\Users\Usuario\Anaconda3\lib\site-packages\pymysql\converters.py", line 27, in escape_item
    val = encoder(val, mapping)

  File "C:\Users\Usuario\Anaconda3\lib\site-packages\pymysql\converters.py", line 118, in escape_unicode
    return u"'%s'" % _escape_unicode(value)

  File "C:\Users\Usuario\Anaconda3\lib\site-packages\pymysql\converters.py", line 73, in _escape_unicode
    return value.translate(_escape_table)

AttributeError: 'Eu' object has no attribute 'translate'
like image 969
Melissa Aguiar Avatar asked Feb 12 '26 18:02

Melissa Aguiar


1 Answers

You can't store python objects in a relational database directly. What you do is to store the data that can be used to regenerate the object when needed.

There are some modules to help with this. They are called ORM - Object-Relational Model

I recommend SQLAlchemy:

import sqlalchemy as sa
from sqlalchemy import Column, Integer, String, create_engine
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker

engine = create_engine('mysql://root:pwd@localhost/banco73')
Base = declarative_base(bind=engine)
Session = sessionmaker(bind=engine)

class Eu(Base):
    __tablename__ = 'tabela73'

    id = Column(Integer(), primary_key=True)
    nome = Column(String(200))
    idade = Column(Integer())

    def __init__(self, nome='mel', idade=22):
        self.nome = nome
        self.idade = idade

Base.metadata.create_all() 
# automatically generates a create table: 
#CREATE TABLE tabela73 (
#   id INTEGER NOT NULL, 
#   nome VARCHAR(200), 
#   idade INTEGER, 
#   PRIMARY KEY (id)
#)

eu = Eu()

session = Session()
session.add(eu)
session.commit() # automatically generates the insert:
#INSERT INTO tabela73 (nome, idade) VALUES ('mel', 22)
like image 153
nosklo Avatar answered Feb 15 '26 07:02

nosklo



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!