python-django-mysql原生sql增删改查搭建搭建web项目

先看我本地的项目结构

1 设置虚拟环境

复制代码
python -m venv venv
.\venv\Scripts\activate

2 在虚拟环境中安装Django

执行 pip install -r requirements.txt

复制代码
asgiref==3.8.1
backports.zoneinfo==0.2.1
Django==3.2
mysqlclient==2.2.4
pytz==2024.2
sqlparse==0.5.1
typing-extensions==4.12.2
tzdata==2024.2

3 在虚拟环境中创建一个新的Django项目:

复制代码
django-admin startproject myproject
cd myproject

4 在项目中创建一个应用,例如myapp:

复制代码
python manage.py startapp myapp

5 定义模型,提前建好表

在myapp/models.py中定义Book模型,但不需要使用makemigrations和migrate,因为数据库表已经提前创建好了.

复制代码
CREATE TABLE `book` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(255) DEFAULT NULL,
  `remark` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;

from django.db import models

class Book(models.Model):
    name = models.CharField(max_length=255)
    remark = models.CharField(max_length=255)

    class Meta:
        db_table = 'book'  # 确保这与你的数据库表名匹配

6 在myproject/settings.py中配置MySQL数据库连接

复制代码
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'test',
        'USER': 'root',
        'PASSWORD': 'root',
        'HOST': 'localhost',  # Or an IP Address that your DB is hosted on
        'PORT': '3306',
    }
}
复制代码
文件里面的CsrfViewMiddleware要注释掉

7 在myapp/views.py中,使用原生SQL实现增删改查,并返回JSON结果

复制代码
from django.shortcuts import render

# Create your views here.
from django.http import JsonResponse
from django.views.decorators.csrf import csrf_exempt
from django.db import connection


# Create a new book
# @csrf_exempt
def create_book(request):
    if request.method == 'POST':
        data = request.POST
        name = data.get('name')
        print(12312)
        print(name)
        remark = data.get('remark')

        with connection.cursor() as cursor:
            cursor.execute("INSERT INTO book (name, remark) VALUES (%s, %s)", [name, remark])

        return JsonResponse({'message': 'Book created successfully', 'status': 200})
    else:
        return JsonResponse({'error': 'Invalid request', 'status': 201})


# Update an existing book
# @csrf_exempt
def update_book(request):
    if request.method == 'POST':
        data = request.POST
        name = data.get('name')
        remark = data.get('remark')
        id = data.get('id')

        with connection.cursor() as cursor:
            cursor.execute("UPDATE book SET name = %s, remark = %s WHERE id = %s", [name, remark, id])
            if cursor.rowcount == 0:
                return JsonResponse({'error': 'Book not found', 'status': 201})

        return JsonResponse({'message': 'Book updated successfully', 'status': 200})
    else:
        return JsonResponse({'error': 'Invalid request', 'status': 201})


# Delete a book
# @csrf_exempt
def delete_book(request):
    if request.method == 'POST':
        data = request.POST
        id = data.get('id')
        with connection.cursor() as cursor:
            cursor.execute("DELETE FROM book WHERE id = %s", [id])
            if cursor.rowcount == 0:
                return JsonResponse({'error': 'Book not found', 'status': 201})

        return JsonResponse({'message': 'Book deleted successfully', 'status': 200})
    else:
        return JsonResponse({'error': 'Invalid request', 'status': 201})


# List all books
def list_books(request):
    with connection.cursor() as cursor:
        cursor.execute("SELECT id, name, remark FROM book")
        books = cursor.fetchall()
    return JsonResponse({'books': books, 'status': 200}, safe=False)

8 在myapp/urls.py中配置URL路径:

复制代码
from django.urls import path
from . import views

urlpatterns = [
    path('books', views.list_books, name='list_books'),
    path('books/create', views.create_book, name='create_book'),
    path('books/update', views.update_book, name='update_book'),
    path('books/delete', views.delete_book, name='delete_book'),
    # 添加其他URL路径
]

9 在myproject/urls.py中包含myapp的URL

复制代码
from django.contrib import admin
from django.urls import include, path

urlpatterns = [
    path('admin/', admin.site.urls),
    path('api/', include('myapp.urls')),  # 注意这里的'api/'
]

10 启动

复制代码
python manage.py runserver

添加

编辑

删除

部署到linux的步骤,没有写,,。。。

相关推荐
吴佳浩2 小时前
Python入门指南(六) - 搭建你的第一个YOLO检测API
人工智能·后端·python
superman超哥3 小时前
仓颉语言中基本数据类型的深度剖析与工程实践
c语言·开发语言·python·算法·仓颉
韩立学长3 小时前
【开题答辩实录分享】以《自助游网站的设计与实现》为例进行选题答辩实录分享
java·mysql·spring
Learner__Q3 小时前
每天五分钟:滑动窗口-LeetCode高频题解析_day3
python·算法·leetcode
————A3 小时前
强化学习----->轨迹、回报、折扣因子和回合
人工智能·python
SAP小崔说事儿3 小时前
在数据库中将字符串拆分成表单(SQL和HANA版本)
java·数据库·sql·sap·hana·字符串拆分·无锡sap
徐先生 @_@|||4 小时前
(Wheel 格式) Python 的标准分发格式的生成规则规范
开发语言·python
Mqh1807624 小时前
day45 简单CNN
python
MatrixOrigin4 小时前
在数据库里玩“平行宇宙”:MatrixOne Data Branch 让数据也拥有Git 的分支/合并/对比/回滚(含跨集群同步)
git·sql·数据分析
q_19132846955 小时前
基于Springboot+MySQL+RuoYi的会议室预约管理系统
java·vue.js·spring boot·后端·mysql·若依·计算机毕业设计