ProgrammingError,Flask with postgres和sqlalchemy

时间:2015-11-11 12:58:42

标签: python postgresql flask sqlalchemy flask-sqlalchemy

我正在尝试使此设置正常工作,数据库已正确创建,但尝试插入数据时出现以下错误:

在sqlite上:

sqlalchemy.exc.OperationalError
OperationalError: (sqlite3.OperationalError) no such column: Author [SQL: u'SELECT count(*) AS count_1 \nFROM (SELECT Author) AS anon_1']

关于postgres:

sqlalchemy.exc.ProgrammingError
ProgrammingError: (psycopg2.ProgrammingError) column "author" does not exist
LINE 2: FROM (SELECT Author) AS anon_1
                     ^
 [SQL: 'SELECT count(*) AS count_1 \nFROM (SELECT Author) AS anon_1']

编辑:也许这与它有关:我不明白为什么它会说“anon_1”,因为我清楚地使用凭据?

我检查了postgres和sqlite,并且表格是正确创建的。它似乎是一个ORM配置错误,因为它似乎只在检查或创建条目时发生,任何建议都会受到欢迎!

class Author(CommonColumns):
    __tablename__ = 'author'
    author = Column(String(200))
    author_url = Column(String(2000))
    author_icon = Column(String(2000))
    comment = Column(String(5000))


registerSchema('author')(Author)


SETTINGS = {
    'SQLALCHEMY_TRACK_MODIFICATIONS': True,
    'SQLALCHEMY_DATABASE_URI': 'sqlite:////tmp/test.db',
    # 'SQLALCHEMY_DATABASE_URI': 'postgresql://xxx:xxx@localhost/test',
}


application = Flask(__name__)

# bind SQLAlchemy
db = application.data.driver
Base.metadata.bind = db.engine
db.Model = Base
db.create_all()

if __name__ == "__main__":
    application.run(debug=True)

1 个答案:

答案 0 :(得分:0)

您用于插入数据的查询是什么?

我认为错误消息可能比它们需要的更加不透明,因为您在三个非常相似的上下文中使用了作者/作者:

  • 班级名称
  • 表名
  • 列名称

为了便于调试,我要做的第一件事就是暂时让每个人都独一无二(AuthorClassauthor_tableauthor_column)这样你就可以检查哪个'作者'实际上是由错误消息引用。

由于您正在使用ORM,我怀疑潜在的问题是您的insert语句在实际使用Author(属性/列名称)时使用Author.author(对象)。 SELECT语句抱怨他们找不到列'author',但是因为你对表名和列名都使用author,所以不清楚实际传递给SQL语句的是什么。