【问题标题】:contacts could not assemble any primary key columns for mapped table联系人无法为映射表组装任何主键列
【发布时间】:2020-12-08 06:55:47
【问题描述】:

当我尝试连接数据库时出现此错误, 无法为映射表组装任何主键列 我在 phpmyadmin 中创建了一个联系人数据库表,第一列将其标记为主键,auto_increment 我还尝试在表中为第一行添加虚拟数据

C:\Users\abdul\AppData\Local\Programs\Python\Python38\lib\site-packages\flask_sqlalchemy\__init__.py:833: FSADeprecationWarning: SQLALCHEMY_TRACK_MODIFICATIONS adds significant overhead and will be disabled by default in the future.  Set it to True or False to suppress this warning.
  warnings.warn(FSADeprecationWarning(
Traceback (most recent call last):
  File "main.py", line 11, in <module>
    class Contacts(db.Model):
  File "C:\Users\abdul\AppData\Local\Programs\Python\Python38\lib\site-packages\flask_sqlalchemy\model.py", line 67, in __init__
    super(NameMetaMixin, cls).__init__(name, bases, d)
  File "C:\Users\abdul\AppData\Local\Programs\Python\Python38\lib\site-packages\flask_sqlalchemy\model.py", line 121, in __init__
    super(BindMetaMixin, cls).__init__(name, bases, d)
  File "C:\Users\abdul\AppData\Local\Programs\Python\Python38\lib\site-packages\sqlalchemy\ext\declarative\api.py", line 76, in __init__
    _as_declarative(cls, classname, cls.__dict__)
  File "C:\Users\abdul\AppData\Local\Programs\Python\Python38\lib\site-packages\sqlalchemy\ext\declarative\base.py", line 131, in _as_declarative
    _MapperConfig.setup_mapping(cls, classname, dict_)
  File "C:\Users\abdul\AppData\Local\Programs\Python\Python38\lib\site-packages\sqlalchemy\ext\declarative\base.py", line 160, in setup_mapping
    cfg_cls(cls_, classname, dict_)
  File "C:\Users\abdul\AppData\Local\Programs\Python\Python38\lib\site-packages\sqlalchemy\ext\declarative\base.py", line 194, in __init__
    self._early_mapping()
  File "C:\Users\abdul\AppData\Local\Programs\Python\Python38\lib\site-packages\sqlalchemy\ext\declarative\base.py", line 199, in _early_mapping
    self.map()
  File "C:\Users\abdul\AppData\Local\Programs\Python\Python38\lib\site-packages\sqlalchemy\ext\declarative\base.py", line 695, in map
    self.cls.__mapper__ = mp_ = mapper_cls(
  File "<string>", line 2, in mapper
  File "<string>", line 2, in __init__
  File "C:\Users\abdul\AppData\Local\Programs\Python\Python38\lib\site-packages\sqlalchemy\util\deprecations.py", line 139, in warned
    return fn(*args, **kwargs)
  File "C:\Users\abdul\AppData\Local\Programs\Python\Python38\lib\site-packages\sqlalchemy\orm\mapper.py", line 723, in __init__
    self._configure_pks()
  File "C:\Users\abdul\AppData\Local\Programs\Python\Python38\lib\site-packages\sqlalchemy\orm\mapper.py", line 1409, in _configure_pks
    raise sa_exc.ArgumentError(
sqlalchemy.exc.ArgumentError: Mapper mapped class Contacts->contacts could not assemble any primary key columns for mapped table 'contacts'


My model:

app= Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql://root:@localhost/coadingthuder'
db=SQLAlchemy(app)


class Contacts(db.Model):
    """s.no name email phone_num mes date"""
    name = db.Column(db.String(80),  nullable =False)
    email = db.Column(db.String(20),  nullable =False)
    phone_num = db.Column(db.String(12),  nullable =False)
    mes = db.Column(db.String(12),  nullable =False)
    date = db.Column(db.String(12), nullable =True)

【问题讨论】:

    标签: flask sqlalchemy flask-sqlalchemy


    【解决方案1】:

    根据文档:

    “大多数 ORM 要求对象定义某种主键,因为内存中的对象必须对应于数据库表中唯一可识别的行”

    SQLAchemy(和 Flask-SQLAlchemy)模型 must declare a primary key。这可以通过将primary_key=True 关键字参数添加到要用作主键的列来完成。

    Flask-SQLAlchemy 示例:

    class Contacts(db.Model):
        """s.no name email phone_num mes date"""
    
        id = db.Column(db.Integer, primary_key=True)
    
        name = db.Column(db.String(80),  nullable =False)
        email = db.Column(db.String(20),  nullable =False)
        phone_num = db.Column(db.String(12),  nullable =False)
        mes = db.Column(db.String(12),  nullable =False)
        date = db.Column(db.String(12), nullable =True)
    

    这个配置会自动创建整数主键并递增,所以创建新模型实例时不需要自己添加。

    【讨论】:

      猜你喜欢
      • 2019-10-29
      • 1970-01-01
      • 1970-01-01
      • 2021-09-26
      • 2021-08-15
      • 2017-10-26
      • 1970-01-01
      • 1970-01-01
      • 2019-09-23
      相关资源
      最近更新 更多