在云服务器上安装MySQL (MariaDB) 数据库并与Python连接和互动

news2024/11/16 19:41:38

诸神缄默不语-个人CSDN博文目录

本文介绍如何在云服务器(CentOS)上安装MySQL数据库(其实是MariaDB数据库,但是当成MySQL用也没什么问题),并用pymysql与原生Python代码进行互动,或用Flask-SQLAlchemy与Flask进行互动。

之所以不直接租个数据库是因为暂时来说服务器的储存空间还够用。

关于pymysql和Flask-SQLAlchemy的选择,可以参考ChatGPT-4的回答:

如果你正在使用Flask来开发一个Web应用,Flask-SQLAlchemy是一个很好的选择,它提供了更高级的数据库抽象,支持更复杂的ORM模式,并且与Flask紧密集成。但是如果你的需求比较简单,或者你更喜欢直接使用SQL语句,那么pymysql就足够好了。

文章目录

  • 1. CentOS云服务器安装MySQL数据库
  • 2. PyMySQL包
  • 3. Flask-SQLAlchemy包
  • 本文撰写过程中参考的网络资料

1. CentOS云服务器安装MySQL数据库

我记得有的镜像好像是默认安装MySQL的,但反正我没有。
可以用这个命令查证一下:mysql --version
没安装的话就会返回这个信息:bash: mysql: command not found
安装后就会返回类似的信息:mysql Ver 8.0.26 for Linux on x86_64 (Source distribution)

root用户运行:yum install mysql
(如果用普通用户运行,就会报这个信息:Error: This command has to be run with superuser privileges (under the root user on most systems).

以下流程也都用root用户运行:

yum install mysql-server
systemctl start mysqld
systemctl enable mysqld

安装服务器→启动→设置开启自启动(不过看介绍说好像这一条不太需要,因为MySQL默认开启)

查看MySQL的运行状态:systemctl status mysqld
在这里插入图片描述

注意接下来的步骤比较微妙:我的情况是mysqld的位置在/var/log/mysql/mysqld.log,这个文件的内容是:
在这里插入图片描述
这玩意居然是空密码开启的……别的教程里面都可以用sudo grep 'temporary password' /var/log/mysqld.log这个命令获取临时密码的。
据说这是因为服务器版本的问题。

总之我是空密码登录:mysql -u root -p

进入MySQL环境中就可以使用SQL语言来进行工作了(具体命令可以查看我之前写的博文:MySQL命令行速查手册(持续更新ing…) )

exit或者quit退出MySQL环境。

2. PyMySQL包

官方GitHub项目:PyMySQL/PyMySQL: MySQL client library for Python
官方文档:Welcome to PyMySQL’s documentation! — PyMySQL 0.7.2 documentation

安装方式:pip install PyMySQL

示例代码(往表格中插入一条信息,查询这条信息):

import pymysql.cursors

# Connect to the database
connection = pymysql.connect(host='localhost',
                             user='New-Username',
                             password='New-Password',
                             db='New-DatabaseName',
                             charset='utf8mb4',
                             cursorclass=pymysql.cursors.DictCursor)

with connection:
    with connection.cursor() as cursor:
        # Create a new record
        sql = "INSERT INTO `users` (`phone_number`, `password`) VALUES (%s, %s)"
        cursor.execute(sql, (phone_number,password))

    # connection is not autocommit by default. So you must commit to save
    # your changes.
    connection.commit()

    with connection.cursor() as cursor:
        # Read a single record
        sql = "SELECT `id`, `password` FROM `users` WHERE `phone_number`=%s"
        cursor.execute(sql, (phone_number,))
        result = cursor.fetchone()
        print(result)

3. Flask-SQLAlchemy包

官方GitHub项目:pallets-eco/flask-sqlalchemy: Adds SQLAlchemy support to Flask
官方速成教程:Quick Start — Flask-SQLAlchemy Documentation (3.0.x)

安装方式:pip install -U Flask-SQLAlchemy

注意Python 3+必须要安装pymysql,才能正常用Flask-SQLAlchemy,因为如果不用pymysql引擎,就会需要用MySQLdb这个包,但是这个包只支持Python 2。

在flask应用中导入:

from flask_sqlalchemy import SQLAlchemy
from sqlalchemy import create_engine, MetaData, Table
from sqlalchemy.orm import sessionmaker

db=SQLAlchemy()
app.config["SQLALCHEMY_DATABASE_URI"]="mysql+pymysql://MySQL用户名:MySQL用户密码@localhost/database名"
#localhost是数据库的IP地址
db.init_app(app)

with app.app_context():
    db.create_all()  #也可以不用这句话,直接在该上下文中运行Flask-SQLAlchemy命令

db.Model类:每个db.Model就相当于一个table,会自动与数据库中实际存在的表相连,如果数据库中不存在会创建。关联方式是要么用__tablename__指定,要么根据db.Model类名来指定(如类名为User,默认表名就是user;类名为UserUsage,默认表名就是user_usage):
(这里多用了一个包:Werkzeug
官方文档:Werkzeug — Werkzeug Documentation (2.3.x)
安装方式:pip install Werkzeug
这个包我以后可能会专门写个介绍博文,现在就直接用就行)

from flask_login import UserMixin
from werkzeug.security import generate_password_hash, check_password_hash

import datetime

class User(UserMixin,db.Model):
    __tablename__='users'
    id=db.Column(db.Integer,primary_key=True)
    phone_number=db.Column(db.String,unique=True,nullable=False)
    nickname=db.Column(db.String)
    password=db.Column(db.String)
    email=db.Column(db.String)
    memo=db.Column(db.String)

    def set_password(self,password):
    	"""将password加密"""
        self.password=generate_password_hash(password)

    def check_password(self,password):
    	"""检查用户输入的密码加密后,是否与储存的密码相同"""
        return check_password_hash(self.password,password)

class ChatBotIO(db.Model):
    __tablename__='chatbot_io'
    id=db.Column(db.Integer,primary_key=True)
    user_id=db.Column(db.Integer,nullable=False)
    phone_number=db.Column(db.String,unique=True,nullable=False)
    service_name=db.Column(db.String,nullable=False)
    user_input=db.Column(db.String)
    system_output=db.Column(db.String)
    now_time=db.Column(db.DateTime,default=datetime.datetime.now)

class UserUsage(db.Model):  #用户的每日使用数量
    id = db.Column(db.Integer, primary_key=True)
    user_id = db.Column(db.Integer, db.ForeignKey('users.id'))
    date = db.Column(db.Date, default=datetime.datetime.now)
    dialogues = db.Column(db.Integer, default=0)
    tokens = db.Column(db.Integer, default=0)
  1. 创建一个样本对象:
    1. 常规写法(一次性初始化所有属性):
    today = datetime.datetime.now().date()
    usage = UserUsage(user_id=current_user.id, date=today)
    
    1. 特殊写法
    user=User(phone_number=phone_number)
    user.set_password(password)
    
  2. 将样本增加到数据库中:
db.session.add(user)
db.session.commit()
  1. 将样本从数据库中删除:
user = User.query.filter_by(phone_number='13451245454').first()
if user:
    # 删除用户
    db.session.delete(user)
    db.session.commit()
  1. 查询样本:
    user=User.query.filter_by(phone_number=form.phone.data).first()(如果不存在,将返回None

本文撰写过程中参考的网络资料

  1. How To Install MySQL on CentOS 7 | DigitalOcean
  2. How to Start, Stop, and Restart MySQL Server - Hivelocity Hosting
  3. CentOS MySQL安装及问题解决_grep: /var/log/mysqld.log: no such file or directo_Charlie。的博客-CSDN博客
  4. 【MySQL入门】(五)Flask使用MySQL存储数据_flask mysql_DooDoo~的博客-CSDN博客
  5. python - ImportError: No module named MySQLdb - Stack Overflow
  6. Python 3 ImportError: No module named ‘ConfigParser’ - Stack Overflow
  7. flask博客项目阿里云ECS部署
  8. html - How to prevent the browser from asking for the favicon? - Stack Overflow:答案是没啥影响,不嫌弃就不去掉也行
  9. How To Redirect To Url In Python Flask – vegibit

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/611245.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SpringSecurityOAuth已停更,来看一看进化版本Spring Authorization Server

Spring Authorization Server是Spring Security OAuth的进化版本,Spring Security OAuth官方已经宣布“End of Life”了。Spring Security OAuth使用的是OAuth2.0标准而Spring Authorization Serve引入了对OAuth 2.1和OpenID Connect 1.0规范的支持,并提…

开源赋能 普惠未来|OpenHarmony诚邀您参与2023开放原子全球开源峰会

OpenHarmony面向万物智联,秉持“生态统一、开放共赢”的理念,围绕“架构解耦、弹性部署”“自由流转、智慧协同”和“极简开发、一致体验”三大架构特征,构建分布式全场景协同的开源操作系统基座与生态系统。面向全场景、全连接、全智能时代&…

项目管理工具最新排名出炉,哪款最适合您?

项目管理工具当下已经成为项目团队的重要榜首,一款合适好用的项目管理工具可以帮助处理很多机械化工作,将管理者更多精力投入到更有价值的工作中,还可以帮助团队组织和计划项目,跟踪进度,处理预算和协作。 该如何挑选帮…

程序员必须掌握的消息中间件-RocketMQ

设计(design) 1 消息存储 消息存储是RocketMQ中最为复杂和最为重要的一部分,本节将分别从RocketMQ的消息存储整体架构、PageCache与Mmap内存映射以及RocketMQ中两种不同的刷盘方式三方面来分别展开叙述。 1.1 消息存储整体架构 消息存储架构图中主要有下面三个跟消息…

在centos7.9上以 All-in-One 模式安装 KubeSphere

文章目录 前言一、什么是 KubeSphere?二、环境准备1.虚拟机准备2.基础环境准备3.安装docker服务4.下载KubeKey安装工具5.开始安装6.安装结束,登陆验证 总结 前言 在centos7.9上以 All-in-One 模式安装 KubeSphere,在虚拟机上安装 一、什么是…

ABeam×Startup丨德硕管理咨询(深圳)创新研究团队拜访「超次元」,探索元宇宙

右一:超次元商务总监 卢佩瑜 左一、中:ABeam-SZ StartUp创新研究团队 ABeam旗下德硕管理咨询(深圳)有限公司(以下简称“ABeam-SZ”)创新研究团队一行前往广州,拜访了海南超次元数码科技有限公司…

【Linux】Centos7下给新用户添加sudo权限

直入正题: 我们用adduser创建新用户后,这个新用户是没有使用sudo的权限的。 比如我们创建一个新用户fortest: 这个用户是没有使用sudo的权限的: 我们可以在root下修改( /etc/sudoers )这个路径下的文件su…

实用工具篇(二):终端连接神器Tabby

1.Tabby概述 一名 Java 后端开发,日常工作中免不了要和 Linux 服务器打交道,因为生产环境基本上都是部署在 Linux 环境下的。以前我使用的终端工具都是FinalShell,但我又发现一款更好更方便的终端工具---Tabby。下面将介绍这款终端工具的安装…

11.动态规划:树形DP问题、树上最大独立集【灵神基础精讲】

文章目录 树形DP问题一、树的直径(二叉树>一般树)[543. 二叉树的直径](https://leetcode.cn/problems/diameter-of-binary-tree/)[124. 二叉树中的最大路径和](https://leetcode.cn/problems/binary-tree-maximum-path-sum/)🎱(树的直径)[…

机器学习常识 20: 全连接 BP 神经网络

摘要: BP (Backpropagation ) 神经网络是一个万能的函数模拟器. 所有的神经网络, 本质都是特征提取器 – 斯 ⋅ \cdot ⋅沃索地. 1. BP 神经网络的结构 图 1 给出一个四层神经网络. 输入层有 3 个端口, 表示数据有 3 个特征;第一个隐藏层有 5 个节点, 表示从 3 个特征提出了…

hdfs中acl权限管理的简单实用

1、背景 在我们开发的过程中有这么一种场景, /projectA 目录是 hadoopdeploy用户创建的,他对这个目录有wrx权限,同时这个目录属于supergroup,在这个组中的用户也具有这个目录的wrx权限,对于其他人,不可访问这个目录。…

[时间同步]NTPPTPgPTP

为什么时间同步很重要? 出于诸多原因,精确的时间对于网络至关重要,比如: 网络管理:从不同网络设备采集来的日志信息进行分析时,需要以时间作为参照依据。如果不同设备上的系统时间不一致,会因…

Docker 容器互联

-v 宿主机与容器互联 第一步在本机建立共享目录:share 第二步创建容器,将容器opt目录挂载到本机的/opt/share目录上 -v 宿主机目录/文件:容器目录/文件 #将宿主机目录/文件挂载到容器做数据卷 这个时候test1 /opt和本机/opt/share已经可以实现共享 …

如何在 Dev-Cpp 中配置 easyx 图形库?看这就够了,超详细(gif 图例演示)!

笔者的相关学习集文章,欢迎前来学习与交流: C 入门到入土!!!学习合集Linux 从命令到网络再到内核!学习合集 言归正传,本期内容:如何在Dev-Cpp中配置easyx图形库?看这就够…

串口屏-迪文10寸T5串口屏数据交互

效果演示 为了便于理解 建议先看上篇博客 点击跳转到上一篇博客 正式开始 1 打开DGUS 2 如图点击文本显示 数据变量 3 填写数据地址 按步骤操作 3-1 先点击框选1处 3-2 再点击框选2处改地址 我改的1000 3-3 设置完直接导出 插入U盘替换DWSET文件夹文件(这一步不理解去看上一…

右值引用和移动语义 ---- c++11

文章目录: 左值?左值引用?右值?右值引用?左值引用与右值引用比较右值引用的使用场景和意义左值引用的使用场景和意义右值引用和移动语义右值引用引用左值完美转发完美转发实际中的使用场景 c 是一种通用编程语言&#…

个人器件库整理

样品本 包含如下: 电容器件: 元件值封装备注钽电容47uF 10V1206钽电容10uF 10V1206电容10uF 10% 10V0603X5R,CL10A106KP8NNNC 元件值封装备注100nF电容50V,10%0603 电阻器件: 元件值封装备注75 Ω \Omega Ω…

2023-06-05 stonedb-在派生表的场景查询为空无法传递默认值-问题分析

摘要: stonedb-在派生表的场景查询为空无法传递默认值-问题分析. 本文对该问题的成因, 相关功能的代码设计, 在下一步设计时如何应对这种问题, 做相关的分析。 https://stoneatom.yuque.com/staff-ft8n1u/lsztbl/rxlhws22n0f1otxn/edit#AqyB 相关ISSUE: https://github.com…

sql server 内存知识

SQL Server对服务器内存的使用策略是用多少内存就占用多少内存,只用在服务器内存不足时,才会释放一点占用的内存,至少释放多少,完全由sql server控制,所以SQL Server 服务器内存往往会占用很高。 SQL Server提供数据库…

华为OD机试真题 Java 实现【一种字符串压缩表示的解压】【2022Q4 100分】,附详细解题思路

一、题目描述 有一种简易压缩算法:针对全部由小写英文字母组成的字符串,将其中连续超过两个相同字母的部分压缩为连续个数加该字母,其他部分保持原样不变。例如:字符串“aaabbccccd”经过压缩成为字符串“3abb4cd”。 请您编写解…