使用SQLchemy时,在设置SQLALCHEMY_DATABASE_URI后,使用flask自定义命令create插入表格信息,为什么创建成功但没有表格数据
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
针对该问题,可以按照以下步骤尝试解决:
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中插入表格数据,可以如下实现:
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))
python
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///:memory:'
db.init_app(app)
python
db.create_all(app=app)
python
u1 = User(name='John')
u2 = User(name='Susan')
db.session.add(u1)
db.session.add(u2)
db.session.commit()
python
users = User.query.all()
print(users)
# [User(id=1, name=u'John'), User(id=2, name=u'Susan')]
这就是在Flask-SQLAlchemy中定义模型类并插入数据的基本流程。主要步骤为:
该回答通过自己思路及引用到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 操作数据库时,还需要注意事务的回滚和异常处理,以确保数据的完整性和一致性。如果在执行数据库操作时出现异常,应该及时回滚事务并处理异常,以避免数据损坏或丢失。
另外,检查一下数据库连接是否正确,以及数据库中是否已经存在同名的表格,这些问题也可能导致插入数据失败。
如果以上回答对您有所帮助,点击一下采纳该答案~谢谢