Python колба SQLAlchemy вставить данные в MySQL

0

Я хочу вставить тестовые данные в таблицы пользователей mysql. Я могу добавить данные в оболочку python в первый раз, но я не знаю, как вставлять данные в новую среду оболочки:

MariaDB [python]> select * from users;
+----+----------+---------+
| id | username | role_id |
+----+----------+---------+
|  1 | John     |    1 |
|  2 | Mary     |    2 |
|  3 | Terry    |    3 |  
|  4 | test_user|    1 | (I want insert 'test_user' into mysql like this)

MariaDB [python]> select * from roles;
+----+-----------+
| id | name      |
+----+-----------+
|  1 | Admin     |
|  2 | Moderator |
|  3 | User      |
+----+-----------+

[root@docker1 namecard]# /root/namecard/bin/python3 manage.py shell
>>> admin_role = Role(name='Admin')
>>> user_test = User(username='test_user', role=admin_role)
>>> db.session.add(user_test)
>>> db.session.commit()
============================================================
Traceback (most recent call last):
   File "/root/namecard/lib/python3.5/site-packages/sqlalchemy/engine/base.py", line 1 context)
... ...
sqlalchemy.exc.IntegrityError: (pymysql.err.IntegrityError) (1062, "Duplicate entry 'Admin' for key 'name'") [SQL: 'INSERT INTO roles (name) VALUES (%(name)s)'] [parameters: {'name': 'Admin'}] (Background on this error at: http://sqlalche.me/e/gkpj)
============================================================

Я знаю, что в системе сообщается о повторяющейся ошибке Admin, но я не знаю, как вставлять данные в таблицу mysql в среде оболочки python.

Вот мой файл models.py:

[root@docker1 namecard]# cat app/models.py
from . import db
class Role(db.Model):
    __tablename__ = 'roles'
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(64), unique=True)
    users = db.relationship('User', backref='role', lazy='dynamic')

    def __repr__(self):
        return '<Role %r>' % self.name
class User(db.Model):
    __tablename__ = 'users'
    id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String(64), unique=True, index=True)
    role_id = db.Column(db.Integer, db.ForeignKey('roles.id'))

    def __repr__(self):
        return '<User %r>' % self.username
  • 0
    Поле username имеет уникальный атрибут, это вызывает ошибку, дублирование в этом поле не допускается. другими словами, Admin уже существует в таблице.
  • 0
    Спасибо за вашу помощь и как я могу вставить данные в таблицу MySQL?
Теги:
sqlalchemy

1 ответ

0
Лучший ответ

В вашей таблице role уже есть запись для Admin поэтому вам не нужно вставлять ее еще раз. Отредактируйте файл manage.py (или запустите его в оболочке) следующими строками:

admin_role = db.session.query(Role).filter_by(name='Admin').first()
user_test = User(username='test_user', role_id=admin_role.id)
db.session.add(user_test)
db.session.commit()
  • 0
    спасибо за вашу помощь ~~~~~~~~

Ещё вопросы

Сообщество Overcoder
Наверх
Меню