首页 > 数据库 >python 操作数据库(mysql)

python 操作数据库(mysql)

时间:2024-04-29 14:11:36浏览次数:58  
标签:name temp python 数据库 mysql sql self condition

python操作数据库,可以有如下几种方式。

1.安装pymysql。(python的一个mysql的插件,意思就是这个服务本身就是通过python来进行安装的)

2.安装mysql-connector。(数据库服务,类似java种的mysql-connector,通过mysql连接工具,可以连接上远程的mysql服务器)

  使用pip安装插件:python -m pip install mysql-connector

我们栗子使用第二种方式!

一个hello world:

import mysql.connector

mydb = mysql.connector.connect(
    host="127.0.0.1",
    user="root",
    password="123456",
    database="test"
)

# 这个mycursor有点类似 mysql的console执行完命令后的的缓冲区的存储的数据 通过这个mycursor对象 进行遍历输出
mycursor = mydb.cursor()
mycursor.execute("SHOW tables")
for x in mycursor:
    print(x)

#     插入操作
sql = "INSERT INTO customer (name, address) VALUES (%s, %s)"
val = ("John", "Highway 21")
mycursor.execute(sql, val)
# 多条数据插入
val = [
  ('Peter', 'Lowstreet 4'),
  ('Amy', 'Apple st 652'),
  ('Hannah', 'Mountain 21'),
  ('Michael', 'Valley 345'),
  ('Sandy', 'Ocean blvd 2'),
  ('Betty', 'Green Grass 1'),
  ('Richard', 'Sky st 331'),
  ('Susan', 'One way 98'),
  ('Vicky', 'Yellow Garden 2'),
  ('Ben', 'Park Lane 38'),
  ('William', 'Central st 954'),
  ('Chuck', 'Main Road 989'),
  ('Viola', 'Sideway 1633')
]

for val in val:
    mycursor.execute(sql, val)
mydb.commit()

mydb.close

附录 custme表的DDL:

CREATE TABLE `mdratool_property` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',
  `session_id` varchar(30) NOT NULL COMMENT '用户ID',
  `property` json NOT NULL COMMENT '运行的配置信息',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=213 DEFAULT CHARSET=latin1 ROW_FORMAT=DYNAMIC COMMENT='mdratool运行的配置信息表';

从从上面的hello world栗子来看,python的这个connector与java原生的mysql-connector类似,都是通过cursor进行数据的操作。

简单的封装:

from numbers import Number

defalut_split = ","


class Entity(object):

    def __init__(self, table_name, param_str, splits=None):
        self.table_name = table_name
        if None == splits:
            splits = defalut_split

        params = str.split(param_str, splits)

        self.params = params

    # 插入单条数据
    def insert_sql(self):
        values = []
        for temp in self.params:
            values.append("%s")

        sql = "INSERT INTO %s (%s) VALUES (%s)" % (
            self.table_name, defalut_split.join(self.params), defalut_split.join(values))

        return sql

    def update_sql(self, changes, dicts):
        sql = "UPDATE %s SET " % (self.table_name)
        change_strs = []
        for temp in changes:
            change_str = "%s = '%s'" % (temp, changes[temp])
            change_strs.append(change_str)

        sql = sql + defalut_split.join(change_strs)

        if len(dicts) < 1:
            return sql

        sql = sql + " WHERE "
        conditions = []
        for temp in dicts:
            condition = "%s = '%s'" % (temp, dicts[temp])
            conditions.append(condition)
        i = 1
        for condition in conditions:
            sql = sql + condition
            if i < len(conditions):
                i += 1
                sql = sql + " AND "
        return sql

    def delete_sql(self, dicts):
        sql = "DELETE FROM %s WHERE " % (self.table_name)
        conditions = []
        for temp in dicts:
            condition = "%s = '%s'" % (temp, dicts[temp])
            conditions.append(condition)

        i = 1
        for condition in conditions:
            sql = sql + condition
            if i < len(conditions):
                i += 1
                sql = sql + " AND "
        return sql

    def select_sql(self, dicts=None):
        sql = "SELECT * FROM %s " % (self.table_name)
        if dicts == None:
            return sql
        sql = sql + " WHERE "
        conditions = []
        for temp in dicts:
            condition = "%s = '%s'" % (temp, dicts[temp])
            conditions.append(condition)
        i = 1
        for condition in conditions:
            sql = sql + condition
            if i < len(conditions):
                i += 1
                sql = sql + " AND "
        return sql

对封装的使用

from entity import Entity
import mysql.connector

mydb = mysql.connector.connect(
    host="192.168.60.161",
    user="root",
    password="sxw2019@NJ321",
    database="test"
)

if __name__ == "__main__":

    c = Entity(table_name="customer", param_str="id,name,address")
    sql = c.select_sql({"id": 23})

    mycursor = mydb.cursor()
    mycursor.execute(sql)
    datas = mycursor.fetchall()

    for data in datas:
        print(type(data))

        print(data)

        id, name, address = (data)
        print(name.decode())

    # 插入操作
    monica = ['31', 'monica', 'nanjing']
    mycursor.execute(c.insert_sql(), monica)
    mydb.commit()

    mydb.close()

这个简单的封装,简化了对SQL的构造,简单的进行数据传输就可以拼凑出一个SQL,当然这也是一个很简单的升级,首先是单表操作,其次是没办法做到复杂的SQL的语句的生成(仅仅是做了CRUD的简单的SQL生成)

高阶的探索:python的ORM框架

 

标签:name,temp,python,数据库,mysql,sql,self,condition
From: https://www.cnblogs.com/jones-walker/p/18130694

相关文章

  • openGauss mysql_fdw
    mysql_fdwmysql_fdw是一款开源插件。openGauss基于开源的mysql_fdwRelease2.5.3版本进行开发适配。编译和使用mysql_fdw需要环境上包含MariaDB的开发包,所以openGauss默认不编译mysql_fdw,下面依次介绍如何编译和使用mysql_fdw。编译mysql_fdw编译mysql_fdw需要安装MariaDB的......
  • Python高阶--Condition
    Condition条件触发importthreadingimporttimeclassProducer(threading.Thread):#生产者函数defrun(self):globalcountwhileTrue:ifcon.acquire():#当count小于等于1000的时候进行生产ifcount>1000:con.wait()else:count=count+100msg=self.name......
  • 《最新出炉》系列入门篇-Python+Playwright自动化测试-40-录制生成脚本
    https://www.cnblogs.com/du-hong/p/17835463.html 1.简介各种自动化框架都会有脚本录制功能,playwright这么牛叉当然也不例外。很早之前的selenium、Jmeter工具,发展到每种浏览器都有对应的录制插件。今天我们就来看下微软自动化框架playwright是如何录制脚本的。很多小伙伴或......
  • mysql按季度统计数量金额
    需求:oms_order-订单表:order_code-订单号,sales_time-销售时间oms_order_shopify_refund-订单退款表:order_code-订单号,refund_time-退款时间oms_order_product:order_code-订单号,seller_sku-商品编码,buy_quantity-售出数量,refund_quantity-退货数量查询订单时间按季度统计售出数量,并......
  • python3的数据结构
    一.列表(列表可以修改,字符串和元组不能)list.append(x)-把一个元素添加到列表的结尾-相当于a[len(a):]=[x]list.extend(L)-通过添加指定列表的所有元素来扩充列表-相当于a[len(a):]=Llist.insert(i,x)-在指定位置插入一个元素-a.insert(0,x)会插入到整个列表之前-a.i......
  • python读取xml中的字段值
    importxml.etree.ElementTreeasETxml_string='''<?xmlversion="1.0"encoding="utf-8"?><rssxmlns:atom="http://www.w3.org/2005/Atom"xmlns:media="http://search.yahoo.com/mrss/"......
  • Python生成GIF动图
    菜鸟程序员带你揭秘python世界GIF动图看起来是不是特别好看,其实制作的方法有很多,但今天,我们来用python编程来自己动手生成GIF动图1、首先我们准备几张清晰的图片2、打开我们的编程工具,这里我使用的是pycharm,任意的python编辑器都可以,打开后,我们创建images目录,将我们准备好的图......
  • 分享几个MySQL数据库管理效率的利器
    本文转载出处:https://mp.weixin.qq.com/s?__biz=MzUzMTkyODc4NQ==&mid=2247486787&idx=1&sn=9738dd8565b0744c05bfb0fe44d2e990&chksm=faba4efdcdcdc7eb6e729ed6c941b064cf8c7c3a7d87eff491d32d4ee7f6423ebd230033d2cc&scene=178&cur_album_id=28693454862......
  • 为什么MySQL不是数据库类型
    MySQL实际上是一个关系型数据库管理系统(RDBMS),而不是一个数据库类型。这里的关键在于理解“数据库类型”和“数据库管理系统”之间的区别。数据库类型:通常指的是数据库模型或数据结构的分类,比如关系型数据库(如MySQL、Oracle、SQLServer等)和非关系型数据库(如MongoDB、Redis、C......
  • Mysql事务原理与优化最佳实践
    学习来源-图灵课堂https://vip.tulingxueyuan.cn说到MySQL的innodb的一大特性,就不得不说到事务。今天就学习事务。事务事务的定义:逻辑上的一组操作,要么一起成功,要么一起失败,中间绝对不会存在别的状态。逻辑上的一组操作,就是说这些操作都是有逻辑关系的。我们通常说的事务是针......