【问题标题】:Flask SQLAlchemy Connect to MySQL DatabaseFlask SQLAlchemy 连接到 MySQL 数据库
【发布时间】:2015-04-05 20:37:52
【问题描述】:

设置和代码:

我正在构建一个带有 AngularJS 前端的基本 Flask 应用程序,目前我需要连接到我使用 Godaddy phpmyadmin 托管的 MySQL 数据库。

这是我__init__.py的一部分

from flask import Flask
from flask.ext.sqlalchemy import SQLAlchemy

# Create instnace called app
app = Flask(__name__)
app.config['SQLAlchemy_DATABASE_URI'] = 'mysql://username:password#@xxxxxx.hostedresource.com/dbname'

# Create SQLAlchemy object
db = SQLAlchemy(app)
# ...

这是我的models.py

from app import app, db

class UsersPy(db.Model):

  __tablename__ = "userspy"

  id = db.Column(db.Integer, primary_key=True)
  username = db.Column(db.String, nullable=False)
  password = db.Column(db.String, nullable=False)

  def __init__(self, username, password):
    self.username = username
    self.password = password

  def __repr__(self):
    return '<title {}'.format(self.username)

这是我views.py中的一个sn-p:

from app import app, db
from app.models import UsersPy
from flask import render_template, request, redirect, url_for, jsonify, session, flash

@app.route('/testdb/')
def testdb():
    admin = UsersPy('user1', 'password1')
    guest = UsersPy('user2', 'password2')

    db.session.add(admin)
    db.session.add(guest)

    #db.session.merge(admin)
    #db.session.merge(guest)
    db.session.commit()

    results = UsersPy.query.all()

    json_results = []
    for result in results:
      d = {'username': result.username,
           'password': result.password}
      json_results.append(d)

    return jsonify(items=json_results)

问题:

所有这些都运行良好,当您访问 /testdb/ 位置时,用户被“创建”并以 JSON 格式显示回来,但是 Godaddy 托管的实际数据库没有更新,因此不能建立真正的连接或者由于某种原因它失败了。我已经创建了 userspy 数据库表,但是 add() 和 commit() 函数实际上并没有将用户添加到数据库中。我不知道如何巩固 SQLAlchemy 和 MySQL 数据库之间的连接。任何帮助表示赞赏,谢谢。

【问题讨论】:

    标签: python mysql angularjs flask sqlalchemy


    【解决方案1】:

    调试的第一步是在您的应用配置中将SQLALCHEMY_ECHO 设置为True。这将导致打印出 SQLAlchemy 正在执行的实际 MySQL 数据库语句。

    另外,值得注意的是SQLAlchemy_DATABASE_URI 与SQLALCHEMY_DATABASE_URI 不同,the Flask-SQLAlchemy documentation 声明配置键应该是。

    【讨论】:

    • 好的,我这样做了,毫不奇怪,它引发了导入错误:no module named 'MySQLdb'。这显然是需要使用 Flask-SQLAlchemy 安装和导入的,但是 MySQLdb 模块还不适用于我正在使用的 Python3.x 版本,这意味着我需要使用 Python2.x 来成功测试数据库连接。
    • 我将继续进行,然后继续调试
    • 您可以通过更改 URI 来选择使用不同的 MySQL 连接器。例如,使用 mysql+pymysql://&lt;username&gt;:&lt;password&gt;@&lt;host&gt;/&lt;dbname&gt;[?&lt;options&gt;] 形式的 URI 将使用支持 Python3 的 pymysql。见docs.sqlalchemy.org/en/latest/dialects/…
    猜你喜欢
    • 2018-06-13
    • 2021-11-02
    • 2018-02-09
    • 2019-03-30
    • 1970-01-01
    • 2013-01-28
    • 2018-03-26
    • 1970-01-01
    • 2014-10-26
    相关资源
    最近更新 更多