flask SQLchemy插入表格数据

使用SQLchemy时,在设置SQLALCHEMY_DATABASE_URI后,使用flask自定义命令create插入表格信息,为什么创建成功但没有表格数据

img

img

img

img

  • 你可以参考下这个问题的回答, 看看是否对你有帮助, 链接: https://ask.csdn.net/questions/7458523
  • 这篇博客你也可以参考下:Flask 使用Flask-SQLAlchemy操作数据库
  • 除此之外, 这篇博客: Flask 之 flask-SQLAlchemy 的使用中的 二、连接 URI 格式 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • SQLAlchemy 把一个引擎的源表示为一个连同设定引擎选项的可选字符串参数的 URI。URI 的形式是:

    dialect+driver://username:password@host:port/database

    该字符串中的许多部分是可选的。如果没有指定驱动器,会选择默认的(确保在这种情况下  包含 + )。

    Postgres:

    postgresql://scott:tiger@localhost/mydatabase

    MySQL:

    mysql://scott:tiger@localhost/mydatabase

    Oracle:

    oracle://scott:tiger@127.0.0.1:1521/sidname

    SQLite (注意开头的四个斜线):

    sqlite:////absolute/path/to/foo.db
  • 您还可以看一下 郭宏志老师的Flask从入门到精通课程中的 Flask-SQLAlchemy简介小节, 巩固相关知识点
  • 以下回答由chatgpt基于相关博客总结生成:

    针对该问题,可以按照以下步骤尝试解决:

    1.确保数据库连接成功,使用SQLAlchemy连接数据库并取数据。

    2.检查表格结构是否正确,可以使用命令行客户端或者可视化工具进行查看。

    3.检查代码中的插入语句是否正确,可以通过打印语句的方式来检查。

    4.如果仍然无法插入数据,可以使用SQLAlchemy自带的调试工具来查看具体的错误信息。

    下面是一份可能的代码实现,假设表格名称为users,插入两条数据(id为1和2):

    from flask import Flask
    from flask_sqlalchemy import SQLAlchemy
    
    app = Flask(__name__)
    app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql+pymysql://username:password@host/dbname'
    db = SQLAlchemy(app)
    
    class User(db.Model):
        id = db.Column(db.Integer, primary_key=True)
        name = db.Column(db.String(80), nullable=False)
    
    @app.cli.command("create")
    def create():
        # 创建表格
        db.create_all()
        # 插入数据
        user1 = User(id=1, name='John')
        db.session.add(user1)
        user2 = User(id=2, name='Mary')
        db.session.add(user2)
        db.session.commit()
        print('数据插入成功')
    
    if __name__ == '__main__':
        app.run()
    

    注意,在该代码中,建议使用命令行方式来插入数据,以便更好地与Flask整合。如果仍然无法插入数据,可以在命令行中使用SQLAlchemy自带的调试工具来查看具体的错误信息,例如:

    $ flask create
     * Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)
    数据插入成功
    $ python
    >>> from app import User, db
    >>> db.session.query(User).all()
    [<User 1>, <User 2>]
    >>> db.session.query(User).filter_by(id=1).first()
    <User 1>
    >>> db.session.query(User).filter_by(id=2).first()
    <User 2>
    

根据您提供的链接,您要在Flask-SQLAlchemy中插入表格数据,可以如下实现:

  1. 定义模型类,继承db.Model:
python
from flask_sqlalchemy import SQLAlchemy

db = SQLAlchemy()

class User(db.Model):
    __tablename__ = 'users'
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(100))


  1. 数据库链接在Flask应用中初始化:
python
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///:memory:'
db.init_app(app)

  1. 创建数据表:
python 
db.create_all(app=app)

  1. 添加数据记录:
python
u1 = User(name='John')
u2 = User(name='Susan')
db.session.add(u1)
db.session.add(u2)
db.session.commit()

  1. 查看插入的数据:
python
users = User.query.all()
print(users)
# [User(id=1, name=u'John'), User(id=2, name=u'Susan')]

这就是在Flask-SQLAlchemy中定义模型类并插入数据的基本流程。主要步骤为:

  1. 定义模型类User,继承db.Model
  2. 初始化数据库链接
  3. 创建数据表
  4. 添加模型类的实例作为数据记录
  5. 提交会话db.session.commit()来实际写入数据库
  6. 查询数据验证

该回答通过自己思路及引用到GPTᴼᴾᴱᴺᴬᴵ搜索,得到内容具体如下:
根据你提供的信息,可能是因为你的代码中没有调用 session.commit() 方法来提交事务,导致插入的数据没有被保存到数据库中。

在使用 SQLAlchemy 操作数据库时,通常的做法是先创建一个会话(Session),然后在会话中执行数据库操作,最后调用 session.commit() 方法来提交事务,将数据写入到数据库中。

在你的代码中,虽然创建了一个会话对象,但是在插入数据后没有调用 session.commit() 方法来提交事务,导致数据没有被保存到数据库中。因此,你可以在插入数据后加上 session.commit() 方法,例如:

@app.cli.command()
def create():
    db.create_all()
    session = db.session()
    user = User(username='admin', email='admin@example.com')
    session.add(user)
    session.commit()  # 提交事务,将数据写入到数据库中
    print('Done.')

需要注意的是,在使用 SQLAlchemy 操作数据库时,还需要注意事务的回滚和异常处理,以确保数据的完整性和一致性。如果在执行数据库操作时出现异常,应该及时回滚事务并处理异常,以避免数据损坏或丢失。

另外,检查一下数据库连接是否正确,以及数据库中是否已经存在同名的表格,这些问题也可能导致插入数据失败。


如果以上回答对您有所帮助,点击一下采纳该答案~谢谢