Flask에서 MySQL 데이터베이스 연결

Salman Mehmood 2022년8월18일
Flask에서 MySQL 데이터베이스 연결

이 설명을 통해 flask_mysqldb를 사용하여 Flask에서 MySQL 데이터베이스를 연결하는 방법을 배웁니다. 또한 온라인으로 데이터베이스를 설정하는 방법도 배웁니다.

flask_mysqldb의 도움으로 Flask에서 MySQL 데이터베이스 연결

때때로 사용자는 sql-alchemy와 같은 것을 사용하는 대신 SQL에서 직접 쿼리를 작성하기를 원하므로 이유가 무엇이든 쿼리 SQL을 작성할 수 있는 옵션이 있습니다. Flask에서 mysqldb를 사용하면 이를 수행할 수 있습니다.

이제 freemysqlhosting.net이라는 서비스에서 무료 MySQL 데이터베이스를 생성합니다. 이 링크를 사용하여 웹 사이트를 방문할 수 있습니다.

계정 생성 후 아래와 같은 화면이 나타나며, 데이터베이스를 생성하면 15분 이내에 데이터베이스 정보가 포함된 이메일을 받게 됩니다.

무료 MySQL 호스팅

이제 Flask 앱 내부의 정보를 위해 이 데이터베이스를 사용할 것입니다. 가장 먼저 할 일은 Flask-MySQLdb라는 모듈을 설치하는 것입니다.

pip install Flask-MySQLdb

이제 필요한 라이브러리를 가져와야 합니다.

from flask import Flask
from flask_mysqldb import MySQL

이제 앱 인스턴스를 만들고 MySQL(app) 클래스를 사용하여 이 앱을 인스턴스화합니다. 여러 Flask 앱으로 작업하는 경우 다음 코드를 사용하여 Flask 앱을 ​​지정할 수도 있습니다.

mysql = MySQL()
mysql.init_app(app)

그러나 우리는 하나의 파일에 모든 것이 있으므로 이것을 할 필요가 없습니다. 그리고 데이터베이스로 작업하고 있으므로 구성을 설정해야 합니다.

먼저 MYSQL_USER를 정의한 다음 MYSQL_PASSWORD가 필요합니다. 또한 데이터베이스가 위치한 MYSQL_HOST를 정의해야 합니다. 그것은 당신의 로컬 컴퓨터나 우리가 이미 또는 다른 곳에서 설정한 것과 같은 별도의 서비스에 있을 수 있습니다.

데이터베이스 자체도 있으므로 데이터베이스 이름을 정의해야 합니다. 반드시 필요하지 않은 추가 구성을 추가하여 반환된 데이터를 얻는 데 도움이 됩니다.

튜플만 필요하지만 열이 키가 될 수 있고 해당 키의 값이 특정 열의 값이 되기 때문에 데이터베이스와 관련하여 사전을 사용하는 것이 조금 더 쉽습니다. 아무것도 추가하지 않으면 기본적으로 튜플을 사용합니다.

app.config["MYSQL_USER"] = "user_name"
app.config["MYSQL_PASSWORD"] = "user_password"
app.config["MYSQL_HOST"] = "sql3.example.net"
app.config["MYSQL_DB"] = "Database_name"
app.config["MYSQL_CURSORCLASS"] = "DictCursor"

mysql = MySQL(app)

포트를 넣을 수 있지만 MySQL 데이터베이스는 기본적으로 3306을 사용하므로 아무것도 업데이트할 필요가 없습니다. 이제 데이터베이스와 상호 작용하기를 원하므로 경로를 만들고 CONNECT_DB()라는 함수를 만들고 데이터베이스와 상호 작용하려면 커서를 사용해야 합니다.

커서를 사용하면 명령문을 실행하여 해당 명령문의 결과를 얻을 수 있습니다. CS라는 변수를 만들고 mysql.connection.cursor()를 사용하여 인스턴스화하고 테이블도 만들고 TABLE_NAME이라고 하고 몇 개의 열을 정의합니다.

@app.route("/")
def CONNECT_DB():
    CS = mysql.connection.cursor()
    CS.execute("""CREATE TABLE TABLE_NAME (id INTEGER, name VARCHAR(20))""")

우리는 이미 테이블을 만들었고 테이블에 데이터를 삽입할 것입니다. 그런 다음 데이터를 삽입하거나 업데이트 또는 삭제한 후 커밋해야 합니다.

또한 데이터가 데이터베이스에 삽입될 때 문자열을 반환합니다.

CS.execute("""INSERT INTO TABLE_NAME VALUES (1, 'Harry')""")
CS.execute("""INSERT INTO TABLE_NAME VALUES (2, 'Arthor')""")
mysql.connection.commit()
return "Executed successfully"

계속해서 서버를 실행하고 브라우저에서 문자열이 반환되는지 확인합니다. 인터넷 연결이 연결되어 있는지 확인하십시오.

Flask MySQL - 출력 1

데이터가 데이터베이스에 삽입되었는지 확인해야 합니다. 이제 테이블을 선택하는 쿼리를 만듭니다.

여러 행을 검색할 것이기 때문에 fetchall()을 사용할 수 있습니다. 모든 정보를 Executed_DATA 변수에 넣습니다.

이것을 콘솔에 인쇄하고 반환된 값을 표시합니다.

CS.execute("""SELECT * FROM TABLE_NAME""")
Executed_DATA = CS.fetchall()
print(Executed_DATA)
return str(Executed_DATA[1]["name"])

페이지를 저장하고 새로고침해 보겠습니다. 표시된 값을 볼 수 있고 여기 콘솔에서 아래를 보면 두 개의 항목이 있는 튜플을 볼 수 있습니다.

Flask MySQL - 출력 2

완전한 파이썬 코드:

from flask import Flask
from flask_mysqldb import MySQL

app = Flask(__name__)

app.config["MYSQL_USER"] = "user_name"
app.config["MYSQL_PASSWORD"] = "user_password"
app.config["MYSQL_HOST"] = "sql3.example.net"
app.config["MYSQL_DB"] = "Database_name"
app.config["MYSQL_CURSORCLASS"] = "DictCursor"

mysql = MySQL(app)

# mysql.init_app(app)


@app.route("/")
def CONNECT_DB():
    CS = mysql.connection.cursor()
    # CS.execute('''CREATE TABLE TABLE_NAME (id INTEGER, name VARCHAR(20))''')

    # CS.execute('''INSERT INTO TABLE_NAME VALUES (1, 'Harry')''')
    # CS.execute('''INSERT INTO TABLE_NAME VALUES (2, 'Arthor')''')
    # mysql.connection.commit()
    # return 'Executed successfully'

    CS.execute("""SELECT * FROM TABLE_NAME""")
    Executed_DATA = CS.fetchall()
    print(Executed_DATA)
    return str(Executed_DATA[1]["name"])


if __name__ == "__main__":
    app.run(debug=True)
Salman Mehmood avatar Salman Mehmood avatar

Hello! I am Salman Bin Mehmood(Baum), a software developer and I help organizations, address complex problems. My expertise lies within back-end, data science and machine learning. I am a lifelong learner, currently working on metaverse, and enrolled in a course building an AI application with python. I love solving problems and developing bug-free software for people. I write content related to python and hot Technologies.

LinkedIn