ArgumentError: Mapper mapped class Users->users could not assemble any primary key columns for mapped table 'users'
ArgumentError: Mapper mapped class Users->users could not assemble any primary key columns for mapped table 'users'
我是 SQLAlchemy 的新手。尝试在 Heroku Postgres 中构建数据库
获取错误:
ArgumentError: Mapper mapped class Users->users could not assemble any primary key columns for mapped table 'users'
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import (Column, Integer, BigInteger, String, Sequence, TIMESTAMP, Boolean, JSON)
from sqlalchemy import sql
from sqlalchemy import Table, Column, Integer, String, MetaData, Sequence, create_engine
class Users(Base):
__tablename__ = 'users'
meta = MetaData()
users_table = Table(
'users', meta,
Column('id', Integer, primary_key=True),
Column('name',String(50)),
Column('fullname',String(50)),
Column('phone',Integer),
)
meta.create_all(engine)
def __repr__(self):
return "<User(id='{}', fullname='{}', username='{}')>".format(
self.id, self.full_name, self.username)
这不起作用的主要原因是您尝试在创建 class User
之前创建 table 并且您声明的 table 不是在正确的属性上声明。所以 sqlalchemy 找不到 id 列。
我试图在下面概述一个更惯用的声明方法:
# This implicitly creates metadata, you do not need to make an explicit one.
Base = declarative_base()
class Users(Base):
__tablename__ = 'users'
# Using a table explicitly is not required here
# Just declare the columns as properties.
id = Column(Integer, primary_key=True)
name = Column(String(50))
fullname = Column(String(50))
phone = Column(Integer)
# Don't do this here because Users is not done
# meta.create_all(engine)
def __repr__(self):
return "<User(id='{}', fullname='{}', username='{}')>".format(
self.id, self.full_name, self.username)
# Do this after classes are declared and use Base's metadata.
Base.metadata.create_all(engine)
参考文献:
如果你真的想设置一个 table 你必须用 __table__
设置它并使用 Base.metadata
:
https://docs.sqlalchemy.org/en/13/orm/extensions/declarative/table_config.html#using-a-hybrid-approach-with-table
我是 SQLAlchemy 的新手。尝试在 Heroku Postgres 中构建数据库
获取错误: ArgumentError: Mapper mapped class Users->users could not assemble any primary key columns for mapped table 'users'
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import (Column, Integer, BigInteger, String, Sequence, TIMESTAMP, Boolean, JSON)
from sqlalchemy import sql
from sqlalchemy import Table, Column, Integer, String, MetaData, Sequence, create_engine
class Users(Base):
__tablename__ = 'users'
meta = MetaData()
users_table = Table(
'users', meta,
Column('id', Integer, primary_key=True),
Column('name',String(50)),
Column('fullname',String(50)),
Column('phone',Integer),
)
meta.create_all(engine)
def __repr__(self):
return "<User(id='{}', fullname='{}', username='{}')>".format(
self.id, self.full_name, self.username)
这不起作用的主要原因是您尝试在创建 class User
之前创建 table 并且您声明的 table 不是在正确的属性上声明。所以 sqlalchemy 找不到 id 列。
我试图在下面概述一个更惯用的声明方法:
# This implicitly creates metadata, you do not need to make an explicit one.
Base = declarative_base()
class Users(Base):
__tablename__ = 'users'
# Using a table explicitly is not required here
# Just declare the columns as properties.
id = Column(Integer, primary_key=True)
name = Column(String(50))
fullname = Column(String(50))
phone = Column(Integer)
# Don't do this here because Users is not done
# meta.create_all(engine)
def __repr__(self):
return "<User(id='{}', fullname='{}', username='{}')>".format(
self.id, self.full_name, self.username)
# Do this after classes are declared and use Base's metadata.
Base.metadata.create_all(engine)
参考文献:
如果你真的想设置一个 table 你必须用 __table__
设置它并使用 Base.metadata
:
https://docs.sqlalchemy.org/en/13/orm/extensions/declarative/table_config.html#using-a-hybrid-approach-with-table