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

时间:2015-10-24 09:38:37

标签: 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)

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

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

1 个答案:

答案 0 :(得分: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

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

检查models.py文件以查看如何将表转换为类,特别是生成的类名称的大小 - 例如&#34; User&#34;或&#34;用户&#34;。

你需要通过&#34; myusers&#34;假设在models.py中生成的用户类被调用&#34;用户&#34;:

@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