我想连接到一个预先存在的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
在很多事情上,我做错了什么?所有帮助赞赏。谢谢。
答案 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