ホームページ >データベース >mysql チュートリアル >MySQL と Python を使用して簡単な Q&A Web サイトを開発する方法

MySQL と Python を使用して簡単な Q&A Web サイトを開発する方法

王林
王林オリジナル
2023-09-20 11:54:251522ブラウズ

MySQL と Python を使用して簡単な Q&A Web サイトを開発する方法

MySQL と Python を使用して簡単な Q&A Web サイトを開発する方法

はじめに:
Q&A Web サイトは、インターネット上で最も人気のあるオンライン ソーシャル プラットフォームの 1 つです。ユーザーが質問し、他のユーザーから回答を得られるプラットフォームを提供します。この記事では、MySQL データベースと Python プログラミング言語を使用して簡単な Q&A Web サイトを開発する方法を詳しく説明し、具体的なコード例を示します。

1. 環境セットアップ
開始する前に、MySQL データベースと Python プログラミング環境がインストールされていることを確認する必要があります。次のリンクから、関連する環境をインストールして構成する方法を学習できます:

  • MySQL データベース: https://dev.mysql.com/downloads/installer/
  • Python プログラミング環境: https://www.python.org/downloads/

2. データベースの作成
MySQL でデータベースを作成し、Q&A Web サイトに必要なデータを保存します。 MySQL のグラフィカル ツール (phpMyAdmin など) またはコマンド ラインを使用してデータベースを作成できます。

サンプルコード:

CREATE DATABASE qanda;

3. データテーブルの作成
ユーザー、質問、回答などの情報を保存するには、対応するデータテーブルをデータベースに作成する必要があります。 qanda データベースにユーザー、質問、回答という 3 つのデータ テーブルを作成します。

  1. ユーザー データ テーブルには、ユーザー名、パスワードなどのユーザー情報が保存されます。

サンプル コード:

CREATE TABLE users (
  id INT AUTO_INCREMENT PRIMARY KEY,
  username VARCHAR(50) NOT NULL,
  password VARCHAR(50) NOT NULL
);
  1. 質問データ テーブルには、質問や質問者などの質問情報が格納されます。

サンプル コード:

CREATE TABLE questions (
  id INT AUTO_INCREMENT PRIMARY KEY,
  title VARCHAR(100) NOT NULL,
  content TEXT NOT NULL,
  user_id INT,
  FOREIGN KEY (user_id) REFERENCES users(id)
);
  1. answers データ テーブルには、回答内容や回答者などの回答情報が格納されます。

サンプル コード:

CREATE TABLE answers (
  id INT AUTO_INCREMENT PRIMARY KEY,
  content TEXT NOT NULL,
  question_id INT,
  user_id INT,
  FOREIGN KEY (question_id) REFERENCES questions(id),
  FOREIGN KEY (user_id) REFERENCES users(id)
);

4. Python コードを作成する
Python プログラミング言語を使用して MySQL データベースに接続し、Q&A Web サイトのロジックを処理するコードを作成します。 。

  1. データベースへの接続:

サンプル コード:

import mysql.connector

db = mysql.connector.connect(
  host="localhost",
  user="root",
  password="password",
  database="qanda"
)
  1. 登録ユーザー:

サンプル コード:

def register_user(username, password):
    cursor = db.cursor()
    sql = "INSERT INTO users (username, password) VALUES (%s, %s)"
    val = (username, password)
    cursor.execute(sql, val)
    db.commit()
    return cursor.lastrowid
  1. 質問する:

サンプルコード:

def ask_question(title, content, user_id):
    cursor = db.cursor()
    sql = "INSERT INTO questions (title, content, user_id) VALUES (%s, %s, %s)"
    val = (title, content, user_id)
    cursor.execute(sql, val)
    db.commit()
    return cursor.lastrowid
  1. 質問に答える:

サンプルコード:

def answer_question(content, question_id, user_id):
    cursor = db.cursor()
    sql = "INSERT INTO answers (content, question_id, user_id) VALUES (%s, %s, %s)"
    val = (content, question_id, user_id)
    cursor.execute(sql, val)
    db.commit()
    return cursor.lastrowid
  1. 質問のリストを取得:

サンプル コード:

def get_question_list():
    cursor = db.cursor()
    sql = "SELECT * FROM questions"
    cursor.execute(sql)
    return cursor.fetchall()
  1. 質問と回答のリストを取得:

サンプル コード:

def get_answer_list(question_id):
    cursor = db.cursor()
    sql = "SELECT * FROM answers WHERE question_id = %s"
    val = (question_id,)
    cursor.execute(sql, val)
    return cursor.fetchall()
  1. 完全なサンプル コード:
import mysql.connector

db = mysql.connector.connect(
  host="localhost",
  user="root",
  password="password",
  database="qanda"
)

def register_user(username, password):
    cursor = db.cursor()
    sql = "INSERT INTO users (username, password) VALUES (%s, %s)"
    val = (username, password)
    cursor.execute(sql, val)
    db.commit()
    return cursor.lastrowid

def ask_question(title, content, user_id):
    cursor = db.cursor()
    sql = "INSERT INTO questions (title, content, user_id) VALUES (%s, %s, %s)"
    val = (title, content, user_id)
    cursor.execute(sql, val)
    db.commit()
    return cursor.lastrowid

def answer_question(content, question_id, user_id):
    cursor = db.cursor()
    sql = "INSERT INTO answers (content, question_id, user_id) VALUES (%s, %s, %s)"
    val = (content, question_id, user_id)
    cursor.execute(sql, val)
    db.commit()
    return cursor.lastrowid

def get_question_list():
    cursor = db.cursor()
    sql = "SELECT * FROM questions"
    cursor.execute(sql)
    return cursor.fetchall()

def get_answer_list(question_id):
    cursor = db.cursor()
    sql = "SELECT * FROM answers WHERE question_id = %s"
    val = (question_id,)
    cursor.execute(sql, val)
    return cursor.fetchall()

5. Web サイト プログラムを実行します。
Flask などの Web フレームワークを使用します。簡単な Web サイト プログラムを作成して Web サーバーを起動し、ブラウザで Q&A サイトにアクセスできるようにします。

サンプルコード (Flask を使用):

from flask import Flask, request, render_template

app = Flask(__name__)

# 注册用户
@app.route('/register', methods=['POST'])
def handle_register():
    username = request.form.get('username')
    password = request.form.get('password')
    user_id = register_user(username, password)
    return f"User registered with ID: {user_id}"

# 提问问题
@app.route('/ask', methods=['POST'])
def handle_ask():
    title = request.form.get('title')
    content = request.form.get('content')
    user_id = int(request.form.get('user_id'))
    question_id = ask_question(title, content, user_id)
    return f"Question asked with ID: {question_id}"

# 回答问题
@app.route('/answer', methods=['POST'])
def handle_answer():
    content = request.form.get('content')
    question_id = int(request.form.get('question_id'))
    user_id = int(request.form.get('user_id'))
    answer_id = answer_question(content, question_id, user_id)
    return f"Answered with ID: {answer_id}"

# 获取问题列表
@app.route('/questions')
def handle_questions():
    questions = get_question_list()
    return render_template('questions.html', questions=questions)

# 获取问题回答列表
@app.route('/answers/<question_id>')
def handle_answers(question_id):
    answers = get_answer_list(int(question_id))
    return render_template('answers.html', answers=answers)

if __name__ == '__main__':
    app.run()

6. まとめ
これで、簡単な質問と回答の Web サイトの開発が完了しました。この記事では、MySQL と Python を使用して Q&A サイトを開発する方法と、具体的なコード例を紹介します。読者がこの記事を通じて MySQL と Python の開発に関する知識を学び、より複雑なアプリケーション開発の基礎として使用できることを願っています。皆さんの発展を祈っています!

以上がMySQL と Python を使用して簡単な Q&A Web サイトを開発する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。