【问题标题】:Flask-SQLAlchemy doesn't create tableFlask-SQLAlchemy 不创建表
【发布时间】:2019-04-12 07:14:33
【问题描述】:

我正在尝试将 PostgreSQL 与 Flask-SQLAlchemy 一起使用。我使用 pgAdmin4 创建了一个名为 data_collector 的数据库。当我尝试创建一个表时,它没有被创建。我认为与数据库的连接没有建立。

我正在尝试从 cmd 运行它:

from app import db
db.create_all()
from flask import Flask, render_template,request
from flask_sqlalchemy import SQLAlchemy

app=Flask(__name__)
app.config['SQLALCHEMY DATABASE_URI'] = 'postgresql://postgres:postgresql@localhost/data_collector'

db=SQLAlchemy(app)

class Data(db.Model):
    __tablename__="data"
    id=db.Column(db.Integer,primary_key=True)
    email_=db.Column(db.String(120),unique=True)
    height_=db.Column(db.Integer)

    def __init__(self,email_,height_):
        self.email_=email_
        self.height_=height_

db.create_all()

【问题讨论】:

    标签: python flask sqlalchemy flask-sqlalchemy


    【解决方案1】:

    创建表后您没有提交到数据库。
    你可以这样做:

    with app.app_context():
        db.create_all()
        db.session.commit()
    

    做这样的事情。

    from flask_sqlalchemy import SQLAlchemy
    from flask import Flask
    
    
    app = Flask(__name__)
    db = SQLAlchemy(app)
    
    # ---snip---
    
    with app.app_context():
        db.create_all()
        db.session.commit()    # <- Here commit changes to database
    
    
    @app.route("/")
    def index():
        return "Hello, World!"
    

    这应该可以解决您的问题。

    如果你想重置(删除)你的数据库,那么:

    with app.app_context():
        db.drop_all()
        db.session.commit()
    

    除非您使用
    db.session.commit() 提交,否则不会在数据库中写入、删除或更新任何内容

    如果您想在提交前还原更改: db.session.rollback()

    【讨论】:

    • 我在 app.app_context() 中包含了:db.create_all() db.session.commit() 上面的类数据,它仍然无法正常工作
    • 把它放在创建所有类之后。
    • 谢谢你,但还是不行。你能建议如何检查连接是否建立。
    • 如果连接失败则会抛出错误。尝试使用sqlite 数据库来查看表是否已创建。
    • 连接失败会抛出错误。但是试试这个查询 SELECT * FROM pg_stat_activity; from ->stackoverflow.com/questions/27435839/… 。还要确保您安装了像psychopg2 这样的数据库驱动程序。
    猜你喜欢
    • 1970-01-01
    • 2018-06-15
    • 2021-03-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多