使用Flask,python和postgresql如何连接到预先存在的数据库?

use*_*663 8 python postgresql flask

我想连接到一个预先存在的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)
Run Code Online (Sandbox Code Playgroud)

def main()的工作原理使我取得了很多成就.

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

{% for user in myusers %}
    <div><p>{{ user.first_name }} </b></p></div>
    {% endfor %}
Run Code Online (Sandbox Code Playgroud)

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

在很多事情上,我做错了什么呢?所有帮助赞赏.谢谢.

pjc*_*ham 13

您需要对现有数据库进行反向工程以生成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
Run Code Online (Sandbox Code Playgroud)

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

检查models.py文件以查看表如何转换为类,尤其是生成的类名称的大小 - 例如"User"或"user".

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

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

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

from models import User
Run Code Online (Sandbox Code Playgroud)