SQLAlchemy错误,带有自引用选项卡

2024-05-29 10:37:09 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试构建一个系统,用户可以用其他帖子回复帖子,但在尝试运行程序时出现错误:

sqlalchemy.exc.InvalidRequestError:
    One or more mappers failed to initialize - can't proceed with initialization of other mappers.
    Triggering mapper: 'Mapper|Post|post'.
    Original exception was: 'Table' object has no attribute 'id'

这是我的密码:

class Post(db.Model):
    id = db.Column(db.Integer, primary_key=True, default=pidgen.gen(8))
    title = db.Column(db.String(500))
    body = db.Column(db.String(10000))
    timestamp = db.Column(db.DateTime, index=True, default=datetime.utcnow)
    user_id = db.Column(db.Integer, db.ForeignKey('user.id'))
    children = db.relationship('Post', backref='parent', lazy='dynamic')
    group_id = db.Column(db.Integer, db.ForeignKey('group.id'))
    parent_id = db.Column(db.Integer, db.ForeignKey('post.id'))
    def __repr__(self):
        return '<Post {}>'.format(self.body)

Tags: idtruedefaultdbstringbodycolumninteger
1条回答
网友
1楼 · 发布于 2024-05-29 10:37:09

你的代码对我有用。你还有什么不包括在内的吗?如何创建数据库?你知道吗

这是我怎么办到的。我必须添加我自己的用户和组,然后删除皮德根·盖特()因为我不清楚这些是从哪里来的。你知道吗

from flask import Flask
from flask_sqlalchemy import SQLAlchemy
from datetime import datetime
import pytz

app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:////tmp/test.db'
db = SQLAlchemy(app)

class User(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String(80), unique=True, nullable=False)
    def __repr__(self):
        return '<User %r>' % self.username

class Group(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(80), unique=True, nullable=False)
    def __repr__(self):
        return '<Group %r>' % self.name

class Post(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    title = db.Column(db.String(500))
    body = db.Column(db.String(10000))
    timestamp = db.Column(db.DateTime, index=True, default=datetime.utcnow)
    user_id = db.Column(db.Integer, db.ForeignKey('user.id'))
    children = db.relationship('Post', backref='parent', lazy='dynamic')
    group_id = db.Column(db.Integer, db.ForeignKey('group.id'))
    parent_id = db.Column(db.Integer, db.ForeignKey('post.id'))
    def __repr__(self):
        return '<Post {}>'.format(self.body)

db.create_all()

运行方式:

python testapp.py

给我这个

sqlite> .schema post
CREATE TABLE post (
    id INTEGER NOT NULL, 
    title VARCHAR(500), 
    body VARCHAR(10000), 
    timestamp DATETIME, 
    user_id INTEGER, 
    group_id INTEGER, 
    parent_id INTEGER, 
    PRIMARY KEY (id), 
    FOREIGN KEY(user_id) REFERENCES user (id), 
    FOREIGN KEY(group_id) REFERENCES "group" (id), 
    FOREIGN KEY(parent_id) REFERENCES post (id)
);
CREATE INDEX ix_post_timestamp ON post (timestamp);

相关问题 更多 >

    热门问题