【问题标题】:using Flask, python and postgresql how can I connect to a pre-existing database?使用 Flask、python 和 postgresql 如何连接到预先存在的数据库?
【发布时间】:2016-01-23 20:03:50
【问题描述】:

我想连接到一个预先存在的 postgres 数据库,该数据库在我的应用程序中没有与之关联的模型。也许不出所料,这被证明很麻烦,这是我第一次尝试使用 Python 和 Flask。

app/py 代码为:

import os
from flask import Flask
from flask import render_template
from flask.ext.sqlalchemy import SQLAlchemy  
from sqlalchemy import create_engine, Column, Integer, String
from sqlalchemy.ext.declarative import declarative_base

app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'postgres://blah:blah@ec2-54-227-254-13.compute-1.amazonaws.com:5432/mydb'
db = SQLAlchemy(app)
db.create_all()
db.session.commit()

@app.route("/")
def main():
    return render_template('index.html')


@app.route('/base')
def base():
    myusers = users.all()
    return render_template('base.html')

if __name__ == '__main__':
    app.run(debug=True)

def main() 的工作让我取得了很多成就。

在视图(base.html)中我们有:

{% for user in myusers %}
    <div><p>{{ user.first_name }} </b></p></div>
    {% endfor %}

当我转到 base.html 页面时,持续错误是 NameError: global name 'users' is not defined

在很多事情中,我在这里做错了什么?所有帮助表示赞赏。谢谢你。

【问题讨论】:

    标签: python postgresql flask


    【解决方案1】:

    您需要对现有数据库进行逆向工程,以生成 SQLAlchemy 可以使用的 Python 模型。

    sqlacodegen 可以为你做,使用 pip 安装它 - pip install sqlacodegen

    在命令提示符下,您可以使用以下命令生成模型:

    sqlacodegen --outfile c:/temp/models.py postgres://blah:blah@ec2-54-227-254-13.compute-1.amazonaws.com:5432/mydb
    

    将生成的models.py 文件复制到您的项目文件夹中,不要忘记导入您需要的模型类,例如你的用户类。

    检查 models.py 文件以查看表是如何转换为类的,尤其是生成的类名的大小写 - 例如“用户”或“用户”。

    您需要将“myusers”变量传递给您的模板,假设在models.py中生成的用户类名为“User”:

    @app.route('/base')
    def base():
        myusers = db.session.query(User).all()
        return render_template('base.html', myusers=myusers)
    

    别忘了在app.py文件的顶部导入用户模型(你需要检查sqlacodgen生成的用户类的名称):

    from models import User
    

    【讨论】:

    • 谢谢,我会试一试,然后运行 ​​python models.py ?
    • 感谢它按照您的建议生成了一个漂亮的文件。现在我该怎么做?很抱歉成为这样的傻瓜。所以我导入我的应用程序文件或 python 运行模型,py?还是别的什么...?
    • 非常感谢,工作愉快。我非常感谢你。但仍然有很多东西要在这里学习!
    猜你喜欢
    • 1970-01-01
    • 2019-10-28
    • 2020-12-26
    • 2018-06-09
    • 2014-10-26
    • 2019-06-05
    • 1970-01-01
    • 2013-10-07
    • 2015-03-29
    相关资源
    最近更新 更多