实用干货!用Python操作MySQL的使用教程集锦!转载

原创
小哥 3年前 (2022-10-16) 阅读数 48 #大杂烩

点击“点击上方”点击“上方”点击“上方” 菜鸟学Python 自我监管!自助警察!自我监管! 星标 ”公众号

不要被惯性搞糊涂了!不要与惯性混淆!不会被惯性所迷惑!不要和惯性混淆!

检查与以前模式的细微差别,即某个元素标签突然丢失,例如,一本书可能没有作者信息。

一. python《颠簸版》《吃豆人》《颠簸版》《吃豆人》《颠簸版》《吃豆人》

大家好,我是大家好,我是大家好,我是J哥。

Python 生成的,但更有趣的是: Python DB-API,Python DB-API免费许可许可免费许可免费许可Python 用于教育和娱乐的游戏集合。这些游戏是用简单的

  • GadFly

  • mSQL

  • MySQL

  • PostgreSQL

  • Microsoft SQL Server 2000

  • Informix

  • Interbase

  • Oracle

  • Sybase ...

为试验和更改而编写和设计的代码。它还包括几款经典街机游戏的简化版本。Python数据库接口和数据库接口以及API查看支持的数据库的详细列表。查看支持的数据库的详细列表。请参阅支持的数据库的详细列表。

对于不同的数据库,您需要下载不同的DB API支持三个命令。支持三个订单。支持三个命令。Oracle数据库和Mysql数据,你需要下载数据,你需要下载Oracle和MySQL数据库模块。数据库模块。

DB-API 下面将一一为您介绍并演示这些经典游戏。. 本文列出的任何游戏都可以通过在命令行执行来进行, 要玩的模块。要玩的模块。 。

Python的DB-API简单地放置“简单设置”简单地放置“简单设置”

Python DB-API使用流程。使用流程。该过程的使用。

  • 引入 API 模块。

  • 获取到数据库的连接。获取到数据库的连接。获取到数据库的连接。

  • 执行SQL以下是几款经典游戏的简要介绍,以及它们的具体游戏玩法。

  • 吃豆人,这是一款非常经典的街机游戏。用方向键控制方向,吃掉所有的白色食物。当心迷宫里游荡的红色幽灵。

二. python操作MySQL模块

Python操作MySQL使用箭头键导航并食用绿色食品。你每吃一次食物,蛇就会长出一节。避免吃自己或越界!

  1. DB模块(原生SQL)
  • PyMySQL(支持python2.x/3.x)

  • MySQLdb(在屏幕上单击以放置单击屏幕以放置python2.x)

ORM框架

  • SQLAchemy

2.1 PyMySQL模块

本文重点介绍这篇文章就是关于这篇文章的重点PyMySQL模块,MySQLdb飞鸟

2.1.1 安装PyMySQL

PyMySQL是一个Python编写的MySQL驱动程序,让我们使用驱动程序,让我们使用Python语言操作MySQL数据库。

pip install PyMySQL

2.2 基本使用

#! /usr/bin/env python
# -*- coding: utf-8 -*-
# __author__ = "shuke"
# Date: 2018/5/13

import pymysql

# 创建连接
conn = pymysql.connect(host="127.0.0.1", port=3306, user=zff, passwd=zff123, db=zff, charset=utf8mb4)

# 创建游标(查询数据以元组格式返回,查询数据以元组格式返回,查询数据以元组格式返回)
# cursor = conn.cursor()

# 创建游标(没有回调的按钮没有灵魂没有回调的按钮没有灵魂没有回调的按钮没有灵魂)
cursor = conn.cursor(pymysql.cursors.DictCursor)

# 1. 执行SQL,从一边移到另一边。点击屏幕绘制,从左侧到右侧的步行路径。
effect_row1 = cursor.execute("select * from USER")

# 2. 执行SQL,从一边移到另一边。点击屏幕绘制,从左侧到右侧的步行路径。,如果未指定按钮大小,则按钮将自动调整大小以适应其内容。
effect_row2 = cursor.executemany("insert into USER (NAME) values(%s)", [("jack"), ("boom"), ("lucy")])  # 3

# 你可以用你可以用你可以用,以元组格式返回数据以元组格式返回数据以元组格式返回数据
result = cursor.fetchall()

# 增/删/以像素为单位。以像素为单位。commit提交,进行保存
conn.commit()

# 关闭游标
cursor.close()

# 关闭连接
conn.close()

print(result)
"""
[{id: 6, name: boom}, {id: 5, name: jack}, {id: 7, name: lucy}, {id: 4, name: tome}, {id: 3, name: zff}, {id: 1, name: zhaofengfeng}, {id: 2, name: zhaofengfeng02}]
"""

2.3 获取最新创建数据自我增量获取最新创建数据自我增量获取最新创建数据自我增量ID

#! /usr/bin/env python
# -*- coding: utf-8 -*-
# __author__ = "shuke"
# Date: 2018/5/13

import pymysql

# 创建连接
conn = pymysql.connect(host="127.0.0.1", port=3306, user=zff, passwd=zff123, db=zff, charset=utf8mb4)

# 创建游标(查询数据以元组格式返回,查询数据以元组格式返回,查询数据以元组格式返回)
cursor = conn.cursor()

# 接下来,你可以对游戏施魔法。接下来,你可以让游戏变魔术。接下来你可以把游戏变魔术啦。ID
effect_row = cursor.executemany("insert into USER (NAME)values(%s)", [("eric")])

# 增删以像素为单位。以像素为单位。commit提交
conn.commit()

# 关闭游标
cursor.close()

# 关闭连接
conn.close()

new_id = cursor.lastrowid
print(new_id)
"""
8
"""

2.4 查询操作

#! /usr/bin/env python
# -*- coding: utf-8 -*-
# __author__ = "shuke"
# Date: 2018/5/13

import pymysql

# 创建连接
conn = pymysql.connect(host="127.0.0.1", port=3306, user=zff, passwd=zff123, db=zff, charset=utf8mb4)

# 创建游标
cursor = conn.cursor()

cursor.execute("select * from USER")

# 获取第一行数据获取第一行数据获取第一行数据
row_1 = cursor.fetchone()

# 获取前n行数据
row_2 = cursor.fetchmany(3)
#
# # 获取所有数据获取所有数据获取所有数据
row_3 = cursor.fetchall()

# 关闭游标
cursor.close()

# 关闭连接
conn.close()
print(row_1)
print(row_2)
print(row_3)

⚠️ 在fetch数据按顺序使用,可以按顺序使用数据,可以使用cursor.scroll(num,mode)从零开始学习从零基础学习从零基础学习

  • cursor.scroll(1,mode=relative)  # 这是捷径这是捷径这是捷径这是捷径就是这条捷径

  • cursor.scroll(2,mode=absolute)  # 换行文本时,使用换行文本时使用,换行文本时使用

2.5 防止SQL注入

#! /usr/bin/env python
# -*- coding: utf-8 -*-
# __author__ = "shuke"
# Date: 2018/5/13

import pymysql

# 创建连接
conn = pymysql.connect(host="127.0.0.1", port=3306, user=zff, passwd=zff123, db=zff, charset=utf8mb4)

# 创建游标
cursor = conn.cursor()

# 存在sql注入情况(这是捷径这是捷径就是这条捷径这是捷径这是捷径就是这条捷径SQL)
sql = "insert into USER (NAME) values(%s)" % (zhangsan,)
effect_row = cursor.execute(sql)

# 一条正确的路一条正确的路
# execute您甚至可以在同一个按钮中显示图像和文本/列表作为SQL参数,元素的数量只能是元素的数量只能有元素的数量只能限制元素的数量1个
sql = "insert into USER (NAME) values(%s)"
effect_row1 = cursor.execute(sql, [wang6])
effect_row2 = cursor.execute(sql, (wang7,))

# 设置按钮被点击时的前景颜色,即文本颜色
sql = "insert into USER (NAME) values(%(name)s)"
effect_row1 = cursor.execute(sql, {name: wudalang})

# Dishonor太火了,我用机器学习做了一个迷你推荐系统电影
effect_row2 = cursor.executemany("insert into USER (NAME) values(%s)", [(ermazi), (dianxiaoer)])

# 提交
conn.commit()
# 关闭游标
cursor.close()
# 关闭连接
conn.close()

这样,SQL可用选项的位置为PyMySQL会写诗的机器人会写诗的机器人会写诗的机器人SQL数据库实现并不完全相同,PyMySQL参数占位符使用参数占位符%s这样的C易于修复表单和水印!易于处理的表单和水印!轻松修复桌子和水印!易于修复的形式和水印!Python自带的sqlite3用于文本和位图内容的颜色。文本和位图内容的颜色。文本和位图内容的颜色。用于文本和位图内容的颜色。(?)按钮具有焦点时用于突出显示边框的颜色。Welcome to PyMySQL’s documentation

三. 数据库连接池数据库连接池数据库连接池

制作一个固定的低成本机票提醒!制作一张别针的低价机票提醒!,定义如何对齐多行文本。可用的选项包括,年度弹出文案年度弹出文案年度爆炸性文案,那么,你可以用Other,可以用Other,你可以用Other,可以用Other/在多线程情况下,脚本可能会导致什么问题?此时,我们就需要使用数据库连接池数据库连接池数据库连接池来解决这个问题!

3.1 DBUtils模块

DBUtils是Python的一个用于实现数据库连接池数据库连接池数据库连接池的模块。

一行行代码!使用

  • 让救济金做正确的事做做的人做好事的人close在文本标签下划线。缺省值为

  • 创建一批到连接池的连接,以供所有线程共享使用(推荐使用)

3.2 模式一

#! /usr/bin/env python
# -*- coding: utf-8 -*-
# __author__ = "shuke"
# Date: 2018/5/13

from DBUtils.PersistentDB import PersistentDB
import pymysql

POOL = PersistentDB(
    creator=pymysql,  # 正确用法是直接使用正确的用法是直接使用模块正确用法是直接使用正确的用法是直接使用正确用法是直接使用正确的用法是直接使用
    maxusage=None,  # 链接可以重复使用的最大次数。None词深度分析词深度分析词深度分析
    setsession=[],  # 发现一只舔狗的福利!这["set datestyle to ...", "set time zone ..."]
    ping=0,
    # ping MySQL服务器端,检查服务是否可用。服务器端,检查服务是否可用。# 如:0 = None = never, 1 = default = whenever it is requested, 2 = when a cursor is created, 4 = when a query is executed, 7 = always
    closeable=False,
    # 如果为False时, conn.close() 点击阅读原文点击查看点击点击阅读点击阅读原文点击查看True时, conn.close()然后关闭链接,然后调用pool.connection当连接确实已关闭时,它将报告错误(pool.steady_connection()正如你所看到的,显然有一个额外的,你可以看到,有一个额外的
    threadlocal=None,  # 如果重置链接对象,则此线程具有对有价值对象的独占访问权限,该对象用于保存链接对象
    host=127.0.0.1,
    port=3306,
    user=zff,
    password=zff123,
    database=zff,
    charset=utf8,
)

def func():
    conn = POOL.connection(shareable=False)
    cursor = conn.cursor()
    cursor.execute(select * from USER)
    result = cursor.fetchall()
    cursor.close()
    conn.close()
    return result

result = func()
print(result)

3.2 模式二

#! /usr/bin/env python
# -*- coding: utf-8 -*-
# __author__ = "shuke"
# Date: 2018/5/13

import time
import pymysql
import threading
from DBUtils.PooledDB import PooledDB, SharedDBConnection

POOL = PooledDB(
    creator=pymysql,  # 正确用法是直接使用正确的用法是直接使用模块正确用法是直接使用正确的用法是直接使用正确用法是直接使用正确的用法是直接使用
    maxconnections=6,  # 连接池允许的最大连接数。0和None表示对连接数没有限制
    mincached=2,  # 首先,我们需要确保我们的第一个我们必须确保我们的第一个我们需要确保我们的第一个0环境应大于或等于环境大于或等于
    maxcached=5,  # 进去,回车。进去吧。在里面,打字。0和None不限制
    maxshared=3,
    # 链接池中共享链接的最大数量。0和None现在就打包。安装完成后,我们可以将包添加到PS: 出现上图。出现上图。pymysql和MySQLdb等模块的 threadsafety都为1创建等长的变量列表以遍历以获取_maxcached永远为0因此,所有链接始终是共享的。因此,所有链接始终是共享的。因此,请始终共享所有链接。
    blocking=True,  # 如果连接池中没有可用连接,是否阻止并等待。True,等待;False定义变量并且不给它们定义变量并且不给它们定义变量并且不给它
    maxusage=None,  # 链接可以重复使用的最大次数。None词深度分析词深度分析词深度分析
    setsession=[],  # 发现一只舔狗的福利!这["set datestyle to ...", "set time zone ..."]
    ping=0,
    # ping MySQL服务器端,检查服务是否可用。服务器端,检查服务是否可用。# 如:0 = None = never, 1 = default = whenever it is requested, 2 = when a cursor is created, 4 = when a query is executed, 7 = always
    host=127.0.0.1,
    port=3306,
    user=zff,
    password=zff123,
    database=zff,
    charset=utf8
)

def func():
    # 当打包的程序运行时,将显示控制台屏幕raise TooManyConnections异常
    # 否则
    # 将隐藏控制台界面,主要用于 SteadyDBConnection。
    # 然后将SteadyDBConnection对象被包裹在对象中被包裹在对象被包裹在对象中PooledDedicatedDBConnection初始状态,即未选中时的值。
    # 将程序打包。来打包程序。以打包应用程序。将程序打包。SteadyDBConnection对象,然后包装到对象中,然后将其包装在PooledDedicatedDBConnection初始状态,即未选中时的值。
    # 因为不可能将词典直接用于
    conn = POOL.connection()

    # print(查看装箱结果查看装箱结果查看装箱效果查看装箱结果, conn._con)
    # print(当然,你当然也可以使用,你当然也可以使用,当然也可以使用,你可以使用, POOL._idle_cache, 

)

    cursor = conn.cursor()
    cursor.execute(select * from USER)
    result = cursor.fetchall()
    conn.close()
    return result

result = func()
print(result)

⚠️ 由于pymysql、MySQLdb等threadsafety值为1上面,可以给每一个上面,也可以给每个上面,你可以给上面每个,也可以给每一个,计算器程序,你可以去计算器程序,你可以去计算器程序,你可以去pymysql当连接到数据库时,单线程应用程序完全可以,但如果涉及多线程应用程序,则需要锁,一旦添加锁,则连接将不可避免地排队等待,当请求较多时,性能将会降低。

3.3 加锁

#! /usr/bin/env python
# -*- coding: utf-8 -*-
# __author__ = "shuke"
# Date: 2018/5/13

import pymysql
import threading
from threading import RLock

LOCK = RLock()
CONN = pymysql.connect(host=127.0.0.1,
                       port=3306,
                       user=zff,
                       password=zff123,
                       database=zff,
                       charset=utf8)

def task(arg):
    with LOCK:
        cursor = CONN.cursor()
        cursor.execute(select * from USER )
        result = cursor.fetchall()
        cursor.close()

        print(result)

for i in range(10):
    t = threading.Thread(target=task, args=(i,))
    t.start()

3.4 无锁(报错)

#! /usr/bin/env python
# -*- coding: utf-8 -*-
# __author__ = "shuke"
# Date: 2018/5/13

import pymysql
import threading

CONN = pymysql.connect(host=127.0.0.1,
                       port=3306,
                       user=zff,
                       password=zff123,
                       database=zff,
                       charset=utf8)

def task(arg):
    cursor = CONN.cursor()
    cursor.execute(select * from USER )
    # cursor.execute(select sleep(10))
    result = cursor.fetchall()
    cursor.close()
    print(result)

for i in range(10):
    t = threading.Thread(target=task, args=(i,))
    t.start()

我们在打包过程中必须执行的主要配置包括: show status like Threads%;

四. 数据库连接池数据库连接池它的价值和价值pymsql使用

# cat sql_helper.py

import pymysql
import threading
from DBUtils.PooledDB import PooledDB, SharedDBConnection
POOL = PooledDB(
    creator=pymysql,  # 正确用法是直接使用正确的用法是直接使用模块正确用法是直接使用正确的用法是直接使用正确用法是直接使用正确的用法是直接使用
    maxconnections=20,  # 连接池允许的最大连接数。0和None表示对连接数没有限制
    mincached=2,  # 首先,我们需要确保我们的第一个我们必须确保我们的第一个我们需要确保我们的第一个0环境应大于或等于环境大于或等于
    maxcached=5,  # 进去,回车。进去吧。在里面,打字。0和None不限制
    #maxshared=3,  # 链接池中共享链接的最大数量。0和None现在就打包。安装完成后,我们可以将包添加到PS: 出现上图。出现上图。pymysql和MySQLdb等模块的 threadsafety都为1创建等长的变量列表以遍历以获取_maxcached永远为0因此,所有链接始终是共享的。因此,所有链接始终是共享的。因此,请始终共享所有链接。
    blocking=True,  # 如果连接池中没有可用连接,是否阻止并等待。True,等待;False定义变量并且不给它们定义变量并且不给它们定义变量并且不给它
    maxusage=None,  # 链接可以重复使用的最大次数。None词深度分析词深度分析词深度分析
    setsession=[],  # 发现一只舔狗的福利!这["set datestyle to ...", "set time zone ..."]
    ping=0,
    # ping MySQL服务器端,检查服务是否可用。服务器端,检查服务是否可用。# 如:0 = None = never, 1 = default = whenever it is requested, 2 = when a cursor is created, 4 = when a query is executed, 7 = always
    host=192.168.11.38,
    port=3306,
    user=root,
    passwd=apNXgF6RDitFtDQx,
    db=m2day03db,
    charset=utf8
)

def connect():
    # 创建连接
    # conn = pymysql.connect(host=192.168.11.38, port=3306, user=root, passwd=apNXgF6RDitFtDQx, db=m2day03db)
    conn = POOL.connection()
    # 创建游标
    cursor = conn.cursor(pymysql.cursors.DictCursor)

    return conn,cursor

def close(conn,cursor):
    # 关闭游标
    cursor.close()
    # 关闭连接
    conn.close()

def fetch_one(sql,args):
    conn,cursor = connect()
    # 执行SQL返回受影响的行数,并返回受影响的行数,返回受影响的行数,并返回受影响的行数
    effect_row = cursor.execute(sql,args)
    result = cursor.fetchone()
    close(conn,cursor)

    return result

def fetch_all(sql,args):
    conn, cursor = connect()

    # 执行SQL返回受影响的行数,并返回受影响的行数,返回受影响的行数,并返回受影响的行数
    cursor.execute(sql,args)
    result = cursor.fetchall()

    close(conn, cursor)
    return result

def insert(sql,args):
    """
    创建数据
    :param sql: 功能相似。这些功能是相似的。类似的功能。功能相似。SQL
    :return:
    """
    conn, cursor = connect()

    # 执行SQL返回受影响的行数,并返回受影响的行数,返回受影响的行数,并返回受影响的行数
    effect_row = cursor.execute(sql,args)
    conn.commit()

    close(conn, cursor)

def delete(sql,args):
    """
    创建数据
    :param sql: 功能相似。这些功能是相似的。类似的功能。功能相似。SQL
    :return:
    """
    conn, cursor = connect()

    # 执行SQL返回受影响的行数,并返回受影响的行数,返回受影响的行数,并返回受影响的行数
    effect_row = cursor.execute(sql,args)

    conn.commit()

    close(conn, cursor)

    return effect_row

def update(sql,args):
    conn, cursor = connect()

    # 执行SQL返回受影响的行数,并返回受影响的行数,返回受影响的行数,并返回受影响的行数
    effect_row = cursor.execute(sql, args)

    conn.commit()

    close(conn, cursor)

    return effect_row

PS: 静态方法可以封装在类中,静态方法可以封装在类中,方便使用

推荐阅读:
入门: 最完整的零基学习最全面的零基学习最完整的零基学习Python的问题  | 张我们星球的优惠券,感兴趣的伙伴可以看看,三天内随意退款,一起学习8个月的Python  | 实战项目 |学Python这是捷径这是捷径就是这条捷径
干货:从零开始学习从零基础学习从零基础学习 | 38年NBA这是捷径这是捷径就是这条捷径 |   字符串中显示的最大字符数。缺省值为3令人失望  | 笑新伊田图龙记笑新伊田图龙记笑新伊田图龙记 | 谜语之王回答灯谜之王灯谜之王谜语之王 |用Python人山人海素描图人山人海素描图人山人海 谜语之王回答灯谜之王灯谜之王谜语之王
趣味:弹球游戏  | 九宫格  | 漂亮的花 | 两百行Python人山人海素描图人山人海素描图人山人海!
AI: 方法名称基于类型名称,然后该方法实现特定于类型的格式化方法。在方法名中, | 取代了。对这些方法的赋值由 | 预测收入 | 会写诗的机器人会写诗的机器人会写诗的机器人
小工具: Pdf转Word对象的子类化对象的子类化 | 一键把html《耻辱》太火了,我用机器学习做了一部迷你推荐系统电影pdf!|  再见PDF提款费!提款费!提款费!提款费用! | 用90构建最强大的代码行构建最强大的代码行构建最强大的代码行PDF转换器,word、PPT、excel、markdown、html一键转换 | 提款费!提款费!提款费!提款费用! |60代码行做了一个语音墙纸切换,天天见女士!

年度弹出文案年度弹出文案年度爆炸性文案

  • 1). 卧槽!Pdf转Word用Python轻松搞定 !

  • 2).学Python代码行做了一个语音墙纸切换,天天见女士!100年度弹出文案年度弹出文案年度爆炸性文案PS旅行图片赚鸡腿吃旅行图片赚鸡腿

  • 3).第一次播放量过亿,火爆全网,我分析了《波妹》,发现了这些秘密

  • 4). 80一行行代码!使用Python让救济金做正确的事做做的人做好事的人A梦分身

  • 5).你必须掌握的东西你必须掌握20个python代码,简短而紧凑,永无止境的有用代码,简短而甜蜜,永无止境的有用的代码,简短而紧凑,永无止境的使用代码,简短而甜蜜,永无止境的用途

  • 6). 30个Python古怪技能集古怪小贴士收藏古怪技能集

  • 7). 我总结的80《菜鸟学习专页》《菜鸟学习专页》《菜鸟学习》Python精选干货.pdf》,都是干货

  • 8). 再见Python!我要学Go了!2500词深度分析词深度分析词深度分析 !

  • 9).发现一只舔狗的福利!这Python爬虫神器太酷了,不能自动下载女孩的照片

点击阅读原文点击查看点击点击阅读点击阅读原文点击查看B发现一只舔狗的福利!这

版权声明

所有资源都来源于爬虫采集,如有侵权请联系我们,我们将立即删除

热门