这是我的代码的开头:
import os
from flask import Flask, render_template, session, redirect, url_for, flash
from flask_bootstrap import Bootstrap
from flask_moment import Moment
from flask_wtf import FlaskForm
from wtforms import StringField, SubmitField
from wtforms.validators import DataRequired
from flask_sqlalchemy import SQLAlchemy
basedir = os.path.abspath(os.path.dirname(__file__))
app = Flask(__name__)
app.config['SECRET_KEY'] = 'hard to guess string'
app.config['SQLALCHEMY_DATABASE_URI'] =
'sqlite:///' + os.path.join(basedir, 'data.sqlite')
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
bootstrap = Bootstrap(app)
moment = Moment(app)
db = SQLAlchemy(app)
a=db.Model
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')
def __repr__(self):
return '<Role %r>' % self.name
由于我在Role中没有看到init方法,我想它在父类db中。模型所以我想看看这个类是如何定义的。我在上层脚本和python终端运行中创建了名为"a"的对象:
In [11]: inspect.getmodule(a)
Out[11]: <module 'sqlalchemy.ext.declarative.api' from 'c:\users\laurent\google drive\python\venv\lib\site-packages\sqlalchemy\ext\declarative\api.py'>
In [12]: inspect.getsource(a)
...
C:Python35libinspect.py in findsource(object)
785 return lines, candidates[0][1]
786 else:
--> 787 raise OSError('could not find class definition')
788
789 if ismethod(object):
OSError: could not find class definition
为什么我会出现这个错误?这个类似乎来自一个python脚本(而不是C代码(。此外,如果有人能为我提供父类的__init__方法,那将是一件非常棒的事情!
谢谢(我是代码专家,所以任何检查/调试代码的建议都会很有趣,也许还有其他专门的问题…(。
所以我不完全确定发生了什么——检查模块的精确性非常复杂。
然而,我认为可能导致问题的一件事是查询类的实例:a
,而不是实际的类。
如果你确实查询了你得到的类:
>>> t = type(a)
>>> t
flask_sqlalchemy.model.DefaultMeta
>>> inspect.getsourcefile(t)
'...\site-packages\flask_sqlalchemy\model.py'
>>> inspect.getsource(t)
'class DefaultMeta(NameMetaMixin, BindMetaMixin, DeclarativeMeta):n passn'
因此,检查类返回适当的源文件似乎是有道理的。我不明白的是,为什么检查类的实例会返回"。。。\站点包\ sqlalchemy\ext\声明性\api.py'.
如果它没有返回包含类定义的文件,我希望它返回实例化的文件,但那将是您运行的脚本,而不是这个api.py
文件。