如何在mysql数据库中保存python对象?

xj3cbfub  于 2021-06-24  发布在  Mysql
关注(0)|答案(1)|浏览(421)

我试图使用python中的一个对象示例创建一个数据库,但收到了如下错误消息:“attributeerror:'eu'object has no attribute'translate'”我不知道如何修复该错误
抱歉伙计们我的英语不是很好这是我的代码:

  1. import pymysql.cursors
  2. class Eu:
  3. def __init__(self, nome='mel', idade=22):
  4. self.nome = nome
  5. self.idade = idade
  6. eu = Eu()
  7. nome = eu.nome
  8. idade = eu.idade
  9. # connect do database
  10. conn = pymysql.connect(host='localhost',
  11. user='root',
  12. password='')
  13. # create a cursor and a database
  14. conn.cursor().execute('CREATE DATABASE banco73')
  15. conn.cursor().execute('USE banco73')
  16. # create tables
  17. conn.cursor().execute('CREATE TABLE tabela73 (eu BLOB)')
  18. # use tables
  19. conn.cursor().execute("""INSERT INTO tabela73 VALUES (?)""", (eu))

整个控制台消息:

  1. runfile('C:/Users/Usuario/.spyder-py3/temp.py', wdir='C:/Users/Usuario/.spyder-py3')
  2. Traceback (most recent call last):
  3. File "<ipython-input-59-9994dddea11c>", line 1, in <module>
  4. runfile('C:/Users/Usuario/.spyder-py3/temp.py', wdir='C:/Users/Usuario/.spyder-py3')
  5. File "C:\Users\Usuario\Anaconda3\lib\site-packages\spyder\utils\site\sitecustomize.py", line 880, in runfile
  6. execfile(filename, namespace)
  7. File "C:\Users\Usuario\Anaconda3\lib\site-packages\spyder\utils\site\sitecustomize.py", line 102, in execfile
  8. exec(compile(f.read(), filename, 'exec'), namespace)
  9. File "C:/Users/Usuario/.spyder-py3/temp.py", line 36, in <module>
  10. conn.cursor().execute("""INSERT INTO tabela73 VALUES (?)""", (eu))
  11. File "C:\Users\Usuario\Anaconda3\lib\site-packages\pymysql\cursors.py", line 168, in execute
  12. query = self.mogrify(query, args)
  13. File "C:\Users\Usuario\Anaconda3\lib\site-packages\pymysql\cursors.py", line 147, in mogrify
  14. query = query % self._escape_args(args, conn)
  15. File "C:\Users\Usuario\Anaconda3\lib\site-packages\pymysql\cursors.py", line 133, in _escape_args
  16. return conn.escape(args)
  17. File "C:\Users\Usuario\Anaconda3\lib\site-packages\pymysql\connections.py", line 839, in escape
  18. return converters.escape_item(obj, self.charset, mapping=mapping)
  19. File "C:\Users\Usuario\Anaconda3\lib\site-packages\pymysql\converters.py", line 27, in escape_item
  20. val = encoder(val, mapping)
  21. File "C:\Users\Usuario\Anaconda3\lib\site-packages\pymysql\converters.py", line 118, in escape_unicode
  22. return u"'%s'" % _escape_unicode(value)
  23. File "C:\Users\Usuario\Anaconda3\lib\site-packages\pymysql\converters.py", line 73, in _escape_unicode
  24. return value.translate(_escape_table)
  25. AttributeError: 'Eu' object has no attribute 'translate'
sz81bmfz

sz81bmfz1#

不能将python对象直接存储在关系数据库中。您要做的是存储在需要时可用于重新生成对象的数据。
有一些模块对此有所帮助。它们被称为orm对象关系模型
我推荐炼金术:

  1. import sqlalchemy as sa
  2. from sqlalchemy import Column, Integer, String, create_engine
  3. from sqlalchemy.ext.declarative import declarative_base
  4. from sqlalchemy.orm import sessionmaker
  5. engine = create_engine('mysql://root:pwd@localhost/banco73')
  6. Base = declarative_base(bind=engine)
  7. Session = sessionmaker(bind=engine)
  8. class Eu(Base):
  9. __tablename__ = 'tabela73'
  10. id = Column(Integer(), primary_key=True)
  11. nome = Column(String(200))
  12. idade = Column(Integer())
  13. def __init__(self, nome='mel', idade=22):
  14. self.nome = nome
  15. self.idade = idade
  16. Base.metadata.create_all()
  17. # automatically generates a create table:
  18. # CREATE TABLE tabela73 (
  19. # id INTEGER NOT NULL,
  20. # nome VARCHAR(200),
  21. # idade INTEGER,
  22. # PRIMARY KEY (id)
  23. # )
  24. eu = Eu()
  25. session = Session()
  26. session.add(eu)
  27. session.commit() # automatically generates the insert:
  28. # INSERT INTO tabela73 (nome, idade) VALUES ('mel', 22)
展开查看全部

相关问题