精华内容
下载资源
问答
  • 本人承接百旺数据库读写接口.微信:epcdata qq:1903172164 转载于:https://www.cnblogs.com/epcdata/p/9547833.html

    本人承接百旺数据库读写接口.微信:epcdata qq:1903172164

    转载于:https://www.cnblogs.com/epcdata/p/9547833.html

    展开全文
  • Python数据库读写

    2020-04-14 12:01:14
    我们的自动化的工作里面经常需要对数据库进行读写的很常见的就是接口测试 1、验证数据(有的时候用例的某个检查点需要我们直接访问数据库,大部分时候我们直接通过界面就可以验证了) 2、做性能测试的时候经常...

    如何用Python程序对数据库进行读写操作是自动化测试中经常要做的事情

    我们的自动化的工作里面经常需要对数据库进行读写的很常见的就是接口测试

    1、验证数据(有的时候用例的某个检查点需要我们直接访问数据库,大部分时候我们直接通过界面就可以验证了)

    2、做性能测试的时候经常需要大量的插入数据,这个时候在界面上慢慢点效率太低,也需要我们直接去操作数据库

    3、(很少碰到) 做测试往往有的时候做的是运维工作(产品开发出来之后,要部署,我们有的时候要到客户那边导数据。比如说公司开发了一个在线教育系统,开发人员开发了一个功能,有一批学校的学生数据导到系统里面,只要给我们提供一个excel表格,在界面上点一下,就导入进去了,但是往往有的时候,一开始学校给我们的数据给错了,里面某一列里面的数据都是不对的,这个时候就麻烦了,给我们另一张表格让我们根据另一张表格的内容把他更新一下,但是我们系统根本就没有更新的功能,数据已经导进去了,学生已经开始用了,学校的要求是赶紧把数据更新过来,不然的话用户在界面上看到自己的数据都不对,这时候怎么办呢?数据还很多,一个学校几千个数据呢,如果根据表格一个个改是很可怕的,很容易改错,我们今天学的知识,用程序直接操作数据库就非常有用了。运维的时候经常做这个事情)

    测试人员去对数据库里面的数据进行验证、插入、更新,python语言去操作是非常方便的

    下面红色部分是我们写的访问数据库的程序,对数据库来说可以称之为客户端程序。我们访问数据库的时候,我们的程序不是直接访问数据库里面的磁盘数据的,我们的程序访问数据库的时候是通过  数据库服务  访问的 ,把请求通过网络传递给数据库服务,告诉他我要查询修改某张表里面的数据...然后数据库服务再去修改数据库里面的数据

    我们写的程序必须通过网络和数据库服务建立连接

    通过网络,我们的程序发过去的请求是一种什么语法? sql语句

    (把数据库安装好之后经常要检查数据库服务有没有启动 service my sql d start 启动数据库服务)

     

    大体了解这个原理,接下来我们就可以安装环境了(既然是用python语言,我们要安装一个客户端的库,因为我们的程序是要通过和数据库服务之间建立连接来发送sql语句的,所以说我们要怎么建立连接呢?自己写这个代码很麻烦,我们需要把一个第三方的库装起来,通过这个第三方的库去操作数据库就直接调用里面的函数就可以了,非常的方便 这个库推荐两个:①mysqlclient②pymysql,这堂课以mycqlclint为例)

    ps:在安装mysqlclient库时遇到了一个问题,pip指令不能在python指令下运行,必须在windows指令下运行,不懂为什么,先记录一下,安装好如下图(在屋子里太冷惹,想去外面晒太阳~希望天气快点暖和起来可以穿新买的裙子~)

     

    ① python与数据库建立连接

    import MySQLdb
    #与数据库服务建立连接 返回值代表连接的对象 缺省端口号3306可以不写,如果不是3306才写
    conn=MySQLdb.connect(
        host='localhost',
        user='root',
        passwd='123123',
        db='mysql',
        #要访问数据库管理系统中的哪个库,数据库管理系统里面可以创建很多个数据库
        charset='utf8'
    )

    ②建立一个游标对象

    #要操纵数据库里面的数据首先要通过连接对象创建一个游标对象,要执行sql语句必须通过这个对象
    c=conn.cursor()

    ③读取数据库里的数据

    读这个表

    c.execute('select * from sq_cource') 

    法一

    #rowcount是游标对象的一个属性,告诉我们前面那个查询语句总共查询多少条语句
    for i in range(c.rowcount):  
           row=c.fetchone()
           print(row)

    法二

    rows=c.fetchall()   
    #这个函数返回所有的信息,就不需要用循环了

    法三

    rows=c.fetchmany(100)   
    #这个函数返回100条信息

    读出来是为了程序帮我们分析数据,比如说我们写了一个自动化的测试程序,通过接口向里面

    添加了一条数据,然后我们要判断数据库里是否存在我们添加的数据,比如我们添加了python课

    数据库每一行的第二个信息是课程名

    for i in range(c.rowcount):  
           row=c.fetchone()
           if row[1]=='python':      #取出元组里的第二个元素,用索引 从0开始,第二个下标是1
               print('检查点=>>python课程找到,通过')
               break

    以上是一个典型的自动化的应用场景(读取数据,然后分析里面有没有我们要找的)

    ④插入数据

     INSERT INTO sq_course(NAME,'desc',display_idx)VALUES('haha','123',6) 在sql里写的代码是这样

    desc是关键字,要用反斜杠引起来;   因为里面有引号,所以外面换成双引号

    用程序插入

    c.execute("INSERT INTO sq_course(NAME,'desc',display_idx)VALUES('haha','123',6)") 
    conn.commit()   # 凡是对数据库进行了修改,都要调用commmit方法

    假如现在在做性能测试,要插入1000门课程信息,怎么做?

    for x in range(1000):
        c.execute(f"INSERT INTO sq_course(NAME,'desc',display_idx)
      VALUES('测试课程{x+1}','测试课程',6)")

    ⑤关闭

    conn.close()

     

    展开全文
  • 一个读写Excel以及读写数据库接口,可以实现脱机操作: 读取数据:规定Excel第一行为Title,读取后的数据形成一个字典序列([{},{},{}]),每一个字典为title和对应行的value。数据库同理。 写数据:以一个二维...

    一个读写Excel以及读写数据库的接口,可以实现脱机操作:

    读取数据:规定Excel第一行为Title,读取后的数据形成一个字典序列([{},{},{}]),每一个字典为title和对应行的value。数据库同理。

    写数据:以一个二维列表维数据写入Excel表中或数据库中,第一行为Title,对应Excel的第一行,数据库的字段名。

    需要注意的是:对于一个Excel文件,有不同的表格,对应到数据库,则为,一个数据库(database),有不同的表格(table)。

    import abc
    class RW(object):
        @abc.abstractmethod
        def read(self,path,name):
            pass
    
        @abc.abstractmethod
        def write(self, path, name,value):
            pass
    
    import xlrd
    from xlrd import xldate_as_tuple
    import datetime
    import openpyxl
    
    class ExcelData(RW):
        # 定义一个读取excel表的方法
        def read(self, data_path, sheetname):
            data = xlrd.open_workbook(data_path)
            table = data.sheet_by_name(sheetname)
            keys = table.row_values(0)
            rowNum = table.nrows
            colNum = table.ncols
            datas = []
            for i in range(1, rowNum):
                sheet_data = {}
                for j in range(colNum):
                    c_type = table.cell(i, j).ctype
                    c_cell = table.cell_value(i, j)
                    if c_type == 2 and c_cell % 1 == 0:  # 如果是整形
                        c_cell = int(c_cell)
                    elif c_type == 3:
                        date = datetime.datetime(*xldate_as_tuple(c_cell, 0))
                        c_cell = date.strftime('%Y/%d/%m %H:%M:%S')
                    elif c_type == 4:
                        c_cell = True if c_cell == 1 else False
                    sheet_data[keys[j]] = c_cell
                datas.append(sheet_data)
            return datas
    
        # 定义一个写excel表的方法
        def write(self,data_path, sheetname,value):
            index = len(value)
            workbook = openpyxl.Workbook()
            sheet = workbook.active
            sheet.title = sheetname
            for i in range(0, index):
                for j in range(0, len(value[i])):
                    sheet.cell(row=i + 1, column=j + 1, value=str(value[i][j]))
            workbook.save(data_path)
            print("xlsx格式表格写入数据成功!")
    
    
    import pymysql
    
    class DB(RW):
        def __init__(self):
            self.connect = pymysql.Connect(
                host='localhost',
                port=3306,
                user='root',
                passwd='',
                db='TT',
                charset='utf8'
            )
            self.cursor = self.connect.cursor()
    
        def read(self,tablespace,table):
            try:
                sql = "use "+tablespace
                self.cursor.execute(sql)
                self.connect.commit()
            except Exception as e:
                print(str(e))
                print("不存在{}表空间!".format(tablespace))
            try:
                sql = "select * from "+table
                self.cursor.execute(sql)
                self.connect.commit()
                description = self.cursor.description
                title = []
    
                for data in description:
                    title.append(data[0])
                datas=[]
                for row in self.cursor.fetchall():
                    sheelData = {}
                    for col in range(len(row)):
                        sheelData[title[col]]=row[col]
                    datas.append(sheelData)
                # print(datas)
                return datas
            except Exception as e:
                print(str(e))
                print("数据读取错误")
    
        def write(self,tablespace,table,value):
            title = value[0]
            colnum=len(title)
    
            # 如果不存在tablespace表空间则新建之
            try:
                import warnings
                sql = "create schema if not exists "+tablespace
                warnings.filterwarnings("error",category=pymysql.Warning)
                self.cursor.execute(sql)
                self.connect.commit()
            except pymysql.Warning as e:
                print(str(e))
            except Exception as e:
                print(str(e))
                print("新建表空间表失败")
                return
    
            # 使用对应表空间
            try:
                sql = "use "+tablespace
                self.cursor.execute(sql)
                self.connect.commit()
            except Exception as e:
                print(str(e))
                print("不存在{}表空间!".format(tablespace))
    
            # 如果表格存在则删除之
            try:
                sql = "drop table if exists "+table
                self.cursor.execute(sql)
                self.connect.commit()
            except pymysql.Warning as e:
                print(str(e))
            except Exception as e:
                print(str(e))
                print("删除表失败")
                return
    
            # 建表
            try:
                sql = "create table "+table+"(" \
                      "id int primary key,"
                for index in range(colnum):
                    sql+= "{} VARCHAR(50),".format(title[index])
                sql = sql.strip(",")
                sql +=");"
                self.cursor.execute(sql)
                self.connect.commit()
            except Exception as e:
                print(str(e))
                print("建表失败")
                return
    
            # 插入数据
            try:
                base = "insert into "+table+"(id,"
                # EnglishName, ChineseName, Type) VALUES
                for index in range(colnum):
                    base+="{},".format(title[index])
                base = base.strip(",")
                base += ") VALUES \n"
                # plus = "({},'{}','{}','{}'),"
                cnt=1
                for indexi in range(1,len(value)):
                    sql=base
                    sql+="({},".format(cnt)
                    for indexj in range(colnum):
                        tmp = str(value[indexi][indexj])
                        tmp = self.__addslashes(tmp)
                        sql+="'{}',".format(tmp)
                    sql = sql.strip(",")
                    sql+=");"
                    print(sql)
                    self.cursor.execute(sql)
                    cnt+=1
                self.connect.commit()
                print()
            except Exception as e:
                print(str(e))
                print("插入失败!")
                print(sql)
    
        def __addslashes(self,s):
            d = {'"':'\\"', "'":"\\'", "\0":"\\\0", "\\":"\\\\"}
            return ''.join(d.get(c, c) for c in s)
    

     

    展开全文
  • 数据库读写分离

    2018-03-12 14:24:32
    数据库读操作比较多的情况下,建议做读写分离一:如果你是自建方式: 使用mysql-proxy、Atlas等,主要实现读写操作的分离以及读权重调整安装过程略,直接上配置(以Atlas为例)[mysql-proxy]#带#号的为非必需的...

    当数据库读操作比较多的情况下,建议做读写分离

    一:如果你是自建方式:

        使用mysql-proxy、Atlas等,主要实现读写操作的分离以及读权重调整

    安装过程略,直接上配置(以Atlas为例)

    [mysql-proxy]


    #带#号的为非必需的配置项目


    #管理接口的用户名

    admin-username=xxx


    #管理接口的密码

    admin-password=xxx


    #Atlas后端连接的MySQL主库的IP和端口,可设置多项,用逗号分隔

    proxy-backend-addresses=xxx:3306


    #Atlas后端连接的MySQL从库的IP和端口,@后面的数字代表权重,用来作负载均衡,若省略则默认为1,可设置多项,用逗号分隔

    proxy-read-only-backend-addresses=xxx:3306@1,xxxxx:3306@2


    #用户名与其对应的加密过的MySQL密码,密码使用PREFIX/bin目录下的加密程序encrypt加密,下行的user1和user2为示例,将其替换为你的MySQL的用户名和加密密码!

    pwds=库名1:加密密码,库名2:加密密码2



    #设置Atlas的运行方式,设为true时为守护进程方式,设为false时为前台方式,一般开发调试时设为false,线上运行时设为true,true后面不能有空格。

    daemon=true


    #设置Atlas的运行方式,设为true时Atlas会启动两个进程,一个为monitor,一个为worker,monitor在worker意外退出后会自动将其重启,设为false时只有worker,没有monitor,一般开发调试时设为false,线上运行时设为true,true后面不能有空格。

    keepalive=false


    #工作线程数,对Atlas的性能有很大影响,可根据情况适当设置

    event-threads=8


    #日志级别,分为message、warning、critical、error、debug五个级别

    log-level=message


    #日志存放的路径

    log-path=/usr/local/mysql-proxy/log


    #SQL日志的开关,可设置为OFF、ON、REALTIME,OFF代表不记录SQL日志,ON代表记录SQL日志,REALTIME代表记录SQL日志且实时写入磁盘,默认为OFF

    sql-log= ON


    #慢日志输出设置。当设置了该参数时,则日志只输出执行时间超过sql-log-slow(单位:ms)的日志记录。不设置该参数则输出全部日志。

    sql-log-slow=1000


    #实例名称,用于同一台机器上多个Atlas实例间的区分

    instance=xxx


    #Atlas监听的工作接口IP和端口

    proxy-address=0.0.0.0:3306


    #Atlas监听的管理接口IP和端口

    admin-address=0.0.0.0:2345


    #分表设置,此例中person为库名,mt为表名,id为分表字段,3为子表数量,可设置多项,以逗号分隔,若不分表则不需要设置该项

    #tables = person.mt.id.3


    #默认字符集,设置该项后客户端不再需要执行SET NAMES语句

    charset=utf8


    #关闭不活跃的客户端连接设置。当设置了该参数时,Atlas会主动关闭经过'wait-timeout'时间后一直未活跃的连接。单位:秒

    wait-timeout=10


    #允许连接Atlas的客户端的IP,可以是精确IP,也可以是IP段,以逗号分隔,若不设置该项则允许所有IP连接,否则只允许列表中的IP连接

    #client-ips = 127.0.0.1, 192.168.1


    #Atlas前面挂接的LVS的物理网卡的IP(注意不是虚IP),若有LVS且设置了client-ips则此项必须设置,否则可以不设置

    #lvs-ips = 192.168.1.1

    #client-ips=

    ----------------------------------------------完毕!--------------------------------------------

    这里有个坑:配置文件命名的时候不要使用相同的前缀,例如:admin.cnf  和 adminxxx.cnf 当你重启admin.cnf的时候 另外一个也会重启,这是因为在  bin/

    mysql-proxyd配置脚本问题,你也可以修改脚本避免这种问题

    pwds=  这里加密密码不是数据库的原始密码!!!

    二:云平台下使用读写分离:

         例如阿里云下可以直接开通使用,开通后可以在数据库连接下调整读权重,请参考:https://help.aliyun.com/document_detail/51070.html



    展开全文
  • C++读写sqlite数据库接口封装项目工程代码,可以根据需要自行扩展
  • 数据库读写分离的优点

    千次阅读 2020-06-26 13:23:17
    今天,根据博主我作为程序猿的经验,来和大家分享一下数据库读写分离带来的优点。 一,读写分离带来的扩展性更强 在我们编码的过程中,随着项目的业务增多,必然会致使业务接口越来越多,接口越多,带来的维护成本就...
  • 达梦数据库读写分离集群搭建 实现原理 实现读写分离集群的基本思路是:利用备库提供只读服务、无法修改数据的特性,优先将所有操作发送到备库执行,一旦备库执行报错,则发送到主库重新执行。通过备库“试错”这么一...
  • 神通数据库帮助手册(SQL语言手册,数据库备份恢复,读写分离集群,数据库审计,数据库进程守护,数据库接口
  • 神通数据库帮助手册(SQL语言手册,数据库备份恢复,读写分离集群,数据库审计,数据库进程守护,数据库接口
  • 多源数据库读写分离

    2019-08-12 21:58:25
    读写分离:不同的数据源相同的repositories (同一个repository有时连接到读库,又是连接到写库) 解决方案: 添加额外的接口,继承之前的接口 1.定义两个完全相同功能的接口,放在不同的包路径下面 2.修改源...
  • 最近我们的APP在线用户越来越多,接口的响应速度也是越来越慢,经过运维排查发现是由于并发查询太多导致的数据库压力比较大,架构师经过调研给出了数据库读写分离的解决方案,为了快速解决问题,我们最终采用AOP技术...
  • #phalapi-进阶篇5(数据库读写分离以及多库使用)###前言##先在这里感谢phalapi框架创始人@dogstar,为我们提供了这样一个优秀的开源框架.读写分离是我们常用的一种解决方案,它可以解决大量读操作的时候数据库瓶颈的...
  • phalapi-进阶篇5(数据库读写分离以及多库使用)前言先在这里感谢phalapi框架创始人@dogstar,为我们提供了这样一个优秀的开源框架.读写分离是我们常用的一种解决方案,它可以解决大量读操作的时候数据库瓶颈的问题,我们...
  • 实现原理实现读写分离集群的基本思路是:利用备库提供只读服务、无法修改数据...读写分离集群不依赖额外的中间件,而是通过数据库接口数据库之间的密切配合,实 现读、写操作自动分离特性。DM 的 JDBC、DPI、DCI、...
  • mysql数据库C语言接口

    2012-02-15 10:33:26
    C语言读写mysql数据库接口函数。MYSQL *mysql_init(MYSQL *mysql) void mysql_close(MYSQL *mysql) 关闭前面打开的连接。
  • phalapi-进阶篇5(数据库读写分离以及多库使用)前言先在这里感谢phalapi框架创始人@dogstar,为我们提供了这样一个优秀的开源框架.读写分离是我们常用的一种解决方案,它可以解决大量读操作的时候数据库瓶颈的问题,我们...
  • 往期热门文章:1、《往期精选优秀博文都在这里了!》2、接口的幂等性的N种考虑,你知道吗?...今天分享一下以前入职现在公司第一次发布项目遇到的一个问题,一个数据库读写分离的坑。前言事情是这样的,刚入...
  • VB代码实现如下: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 ... 28...
  • 上一篇我们已经通过mybatis自定义插件的形式,实现了数据库的主从读写分离,这一篇是通过spring的AOP方式实现 通过AOP实现主从库读写分离有2种实现 1. com.lwl.aop  这种是通过注解的形式,在需要读从库的接口...
  • ip21 c#读写接口

    2018-07-30 13:59:04
    c# 读写ip21 数据库c# 读写ip21 数据库c# 读写ip21 数据库c# 读写ip21 数据库c# 读写ip21 数据库c# 读写ip21 数据库
  • NT 3.1版本为项目用户专门开发了负载均衡、数据库读写分离、分布式缓存和检测工具一系列套件,为超大型社区建设提供了完美的技术解决方案。但在标准版中没有实现读写分离的.在此为标准版实现了数据读写分离 1. 第一...
  • 接口收到用户的请求。 接口优先将 SQL 发送到备库执行。 备库执行并返回执行结果。如果接口收到的是备库执行成功消息,则转到第 6 步,如果接口收到的是备库执行失败消息,则转到第 4 步。 重新将执行失败的 SQL ...
  • 本文重点介绍两种方案实现读写分离,推荐第二种方案 方案一: ...优点:通过注解的方法在Service业务层(接口或者实现类)每个方法上配置数据源,原有代码改动量少,支持多读,易扩展 缺点:需要...
  • HR开发总结 设计方面 网址 ... ... ...2.前端采用了新的vue2.0的技术很不错学习了下,前段使用element...3.后端使用了springboot,一种为服务型框架,搭建了RESTful接口与前段解耦,也不错,后端使用的就是自定参数注入最为
  • 一、读写分离 二、垂直拆分、水平拆分 1.垂直划分 (1)按照业务将表进行分类,垂直拆分是把不同的表拆到不同的数据库中。数据库专库专用,比如拆为Products、Users、Deal库。 缺点: (1)部分业务表无法join,...
  • q=SELECT * FROM cpu_load") #其中db为数据库名,q为查询语句 print(a.text) 写入(post请求) import requests headers = {'Content-Type': 'text/plain'} #设置请求头为文本 datas = "cpu_load_short3,h.
  • 自定义数据缓存DAO类,必须实现com.tangosol.net.cache.CacheStore接口或者com.tangosol.net.cache.CacheLoader 接口,由于 com.tangosol.net.cache.AbstractCacheStore 继承了...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,445
精华内容 578
关键字:

数据库读写接口