【问题标题】:Connect to MySQL database using Flask, SQLAlchemy使用 Flask、SQLAlchemy 连接 MySQL 数据库
【发布时间】:2018-06-13 22:26:54
【问题描述】:

我想使用 Flask 连接到 MySQL 数据库。以下是我的代码:

app.config['MYSQL_HOST'] = 'localhost'
app.config['MYSQL_USER'] = 'admin'
app.config['MYSQL_PASSWORD'] = '********'
app.config['MYSQL_DB'] = 'abc'

app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql+pymysql://admin:********@localhost/abc'

api = Api(app)
db = SQLAlchemy(app)
ma = Marshmallow(app)

db.create_all()

class Video(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    videoid = db.Column(db.String(80), unique=True)
    video_timestamp = db.Column(db.Integer, unique=True)

    def __init__(self, videoid, video_timestamp):
        self.videoid = videoid
        self.video_timestamp = video_timestamp

我遇到了这个错误:

sqlalchemy.exc.ProgrammingError: (pymysql.err.ProgrammingError) (1146, "表 'abc.video' 不存在") [SQL: 'SELECT video.id AS video_id, video.videoid AS video_videoid, video.video_timestamp AS video_video_timestamp \nFROM video']

我知道如何连接SQLite数据库,但是连接MySQL数据库似乎很难?

有人可以帮帮我吗?

【问题讨论】:

  • 不是 100% 确定,是不是您在声明 Video 模型之前调用了 db.create_all()
  • 我尝试删除这一行并在 终端 我尝试打开 python3 并使用以下代码:from my_app import db 但它不起作用
  • 到底是怎么回事?

标签: python mysql flask flask-sqlalchemy


【解决方案1】:

您的数据库连接没有问题,但您的表似乎尚未创建。 所以删除代码中的db.create_all() 并从the sql_alchemy official documentation 进行检查:

要创建初始数据库,只需从 交互式 Python shell 并运行 SQLAlchemy.create_all() 方法来 创建表和数据库:

from yourapplication import db
db.create_all()

【讨论】:

  • 我试过了,但出现了同样的错误。我知道这种手动创建表的方式。
  • 在您的代码中删除 db.create_all() 后,您运行并在 python 控制台中运行它会拒绝?
  • @detuvoldo 我已经添加了这些信息,但我无法重现您的错误
  • 不,我没有。我正在尝试连接到 MariaDB
【解决方案2】:

连接Mysql的代码:

from flaskext.mysql import MySQL

cursorclass,并自动提交让生活更轻松

mysql = MySQL(autocommit=True, cursorclass= DictCursor)
app.config['SECRET_KEY'] = 'Thisissupposedtobesecret!'
app.config['MYSQL_DATABASE_USER'] = 'root'
app.config['MYSQL_DATABASE_PASSWORD'] = 'root'
app.config['MYSQL_DATABASE_DB'] = 'db'
app.config['MYSQL_DATABASE_HOST'] = 'localhost'
app.config['MYSQL_DATABASE_PORT'] = 8889
app.config['MYSQL_CURSORCLASS'] = 'DictCursor'
mysql.init_app(app)

connect cursor 
cursor = conn.cursor()

您可以在 phpmyadmin (localhost) 在线下载 xxamp 或 Mamp 和主机数据库

【讨论】:

  • 我正在尝试使用 ORM :D 感谢您的帮助
  • 自动提交让生活变得很痛苦。
  • 即使是小型项目?
猜你喜欢
  • 1970-01-01
  • 2019-03-30
  • 1970-01-01
  • 2013-01-28
  • 2018-03-26
  • 1970-01-01
  • 2021-11-02
  • 2014-10-26
  • 2018-02-09
相关资源
最近更新 更多