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'
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)
You can serialize your object using python pickle .
Pickling in Python is a way of storing sometimes complex data structures into a binary representation that can be unpickled later to get back the same data structure.
Note: To store pickle data on MySQL use Binary as the column type
Example:
import pickle
class MyClass:
def __init__(self, name):
self.name = name
my_class = MyClass(name='Chuck Norris')
# pickle
my_data = pickle.dumps(my_class)
# unpickle
x = pickle.loads(my_data)
print(x.name)
# Output: Chuck Norris
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.