作为tut的一部分,我试图连接到postgres服务器,其结构如屏幕截图所示。我添加了一个db“烧瓶”,您可以看到。
基于该tut,我的主文件(’routes.py’)中包含以下代码:
from flask.ext.sqlalchemy import SQLAlchemy from flask import Flask app = Flask(__name__) app.config['SQLALCHEMY_DATABASE_URI'] = "postgresql://postgres:123@localhost/flask" db = SQLAlchemy(app) from models import User # db.init_app(app) db.create_all() db.session.commit() admin = User('admin', 'admin@example.com', 'admin1', 'admin1@example.com') guest = User('admi2', 'admin@ex1ample.com', 'admin', 'admin2@example.com') # guest = User('guest', 'guest@example.com') db.session.add(admin) db.session.add(guest) db.session.commit()
models.py:
from flask.ext.sqlalchemy import SQLAlchemy from werkzeug import generate_password_hash, check_password_hash db = SQLAlchemy() class User(db.Model): __tablename__ = 'users' uid = db.Column(db.Integer, primary_key = True) firstname = db.Column(db.String(100)) lastname = db.Column(db.String(100)) email = db.Column(db.String(120), unique=True) pwdhash = db.Column(db.String(54)) def __init__(self, firstname, lastname, email, password): self.firstname = firstname.title() self.lastname = lastname.title() self.email = email.lower() self.set_password(password) def set_password(self, password): self.pwdhash = generate_password_hash(password) def check_password(self, password): return check_password_hash(self.pwdhash, password)
运行时,调试器给出:
sqlalchemy.exc.ProgrammingError: (psycopg2.ProgrammingError) relation "users" does not exist LINE 1: INSERT INTO users (firstname, lastname, email, pwdhash) VALU... ^ [SQL: 'INSERT INTO users (firstname, lastname, email, pwdhash) VALUES (%(firstname)s, %(lastname)s, %(email)s, %(pwdhash)s) RETURNING users.uid'] [parameters: {'lastname': 'Admin@Example.Com', 'firstname': 'Admin', 'pwdhash': 'pbkdf2:sha1:1000$eZvJNKHO$64f59c34364e3d6094d126fa3ca2b327ab39e302', 'email': 'admin1'}]
我究竟做错了什么?
从本质上讲,您将需要将其拆分为几个文件,以防止导入问题并使事情更加整洁。我已经完成了以下工作。注意,我已经使用了SQLite,因为我没有在此框中安装Postgres。
app.py
from flask import Flask app = Flask(__name__) app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:////test11.db'
models.py
from flask.ext.sqlalchemy import SQLAlchemy from app import app db = SQLAlchemy(app) class User(db.Model): __tablename__ = 'users' uid = db.Column(db.Integer, primary_key = True) firstname = db.Column(db.String(100)) lastname = db.Column(db.String(100)) email = db.Column(db.String(120), unique=True) pwdhash = db.Column(db.String(54)) def __init__(self, firstname, lastname, email, password): self.firstname = firstname.title() self.lastname = lastname.title() self.email = email.lower() self.set_password(password) def set_password(self, password): self.pwdhash = (password) def check_password(self, password): return password
route.py
from models import User, db db.create_all() db.session.commit() admin = User('admin', 'admin@example.com', 'admin1', 'admin1@example.com') guest = User('admi2', 'admin@ex1ample.com', 'admin', 'admin2@example.com') db.session.add(admin) db.session.add(guest) db.session.commit()
我绝对建议查看一些教程!您将需要它:您应该了解Web漏洞,最佳实践等。