无法测试简单的 sqlalchemy 模型数据类:"Mapper mapped class could not assemble any primary key columns for mapped table"
Cannot test simple sqlalchemy model dataclass: "Mapper mapped class could not assemble any primary key columns for mapped table"
我有一个简单的 Python 脚本 (models.py
) 来创建 Flask-SQLAlchemy 应用程序和一个简单的 sqlalchemy 数据类 (reference here),如下所示:
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = "sqlite:///test.db"
db = SQLAlchemy(app)
class User(db.Model):
__tablename__ = 'user'
user_id: db.Column(db.Integer, primary_key=True)
user_url: db.Column(db.String(2083), unique=True, nullable=False)
username: db.Column(db.String(80), unique=True, nullable=False)
avatar_url: db.Column(db.String(2083), unique=True, nullable=False)
然后我按照从 here 创建 Flask-SQLAlchemy 应用程序的示例编写了一个非常简单的 pytest 脚本,如下所示:
import pytest
from models import User
from models import db
def test_basic():
db.create_all()
u1 = User(1, "http://testuserurl", "charliebrown", "http://avatarurl")
assert u1.user_id == 1
assert u1.user_url == "http://testuserurl"
assert u1.username == "charliebrown"
assert u1.avatar_url == "http://avatarurl"
此测试在“from models import User”行立即失败并显示消息:
sqlalchemy.exc.ArgumentError: Mapper mapped class User->user could not
assemble any primary key columns for mapped table 'user'
我不明白这条消息(特别是考虑到我确实在 User
中指定了 primary_key
)。有什么帮助吗?
尝试使用 =
而不是 :
像这样:
class User(db.Model):
__tablename__ = 'user'
user_id = db.Column(db.Integer, primary_key=True)
user_url = db.Column(db.String(2083), unique=True, nullable=False)
username = db.Column(db.String(80), unique=True, nullable=False)
avatar_url = db.Column(db.String(2083), unique=True, nullable=False)
我有一个简单的 Python 脚本 (models.py
) 来创建 Flask-SQLAlchemy 应用程序和一个简单的 sqlalchemy 数据类 (reference here),如下所示:
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = "sqlite:///test.db"
db = SQLAlchemy(app)
class User(db.Model):
__tablename__ = 'user'
user_id: db.Column(db.Integer, primary_key=True)
user_url: db.Column(db.String(2083), unique=True, nullable=False)
username: db.Column(db.String(80), unique=True, nullable=False)
avatar_url: db.Column(db.String(2083), unique=True, nullable=False)
然后我按照从 here 创建 Flask-SQLAlchemy 应用程序的示例编写了一个非常简单的 pytest 脚本,如下所示:
import pytest
from models import User
from models import db
def test_basic():
db.create_all()
u1 = User(1, "http://testuserurl", "charliebrown", "http://avatarurl")
assert u1.user_id == 1
assert u1.user_url == "http://testuserurl"
assert u1.username == "charliebrown"
assert u1.avatar_url == "http://avatarurl"
此测试在“from models import User”行立即失败并显示消息:
sqlalchemy.exc.ArgumentError: Mapper mapped class User->user could not assemble any primary key columns for mapped table 'user'
我不明白这条消息(特别是考虑到我确实在 User
中指定了 primary_key
)。有什么帮助吗?
尝试使用 =
而不是 :
像这样:
class User(db.Model):
__tablename__ = 'user'
user_id = db.Column(db.Integer, primary_key=True)
user_url = db.Column(db.String(2083), unique=True, nullable=False)
username = db.Column(db.String(80), unique=True, nullable=False)
avatar_url = db.Column(db.String(2083), unique=True, nullable=False)