首页 > 数据库 >python3 mysql 连接

python3 mysql 连接

时间:2024-10-12 17:24:13浏览次数:7  
标签:__ self db cursor def conn mysql 连接 python3

python3 mysql 连接脚本

# -*- coding: utf-8 -*-



# import MySQLdb,sys,os
import pymysql as MySQLdb,sys,os
import os,sys,traceback
# import MySQLdb.cursors
#import mysql.connector


def singleton(cls):
    instances = {}
    def get_instance():
        if cls not in instances:
            instances[cls] = cls()
        return instances[cls]
    return get_instance()

# 单例模式
@singleton
class GConfig:
    def __init__(self):
        self.db_host = "127.0.0.1"
        self.db_user = "root"
        self.db_pass = "123456"
        self.db_name = "test"
        self.db_port = 3306

class DB(object):
    def __init__(self,host=GConfig.db_host,user=GConfig.db_user,passwd=GConfig.db_pass,
        dbname=GConfig.db_name,charset="utf8",autocommit = True
        ,cursorclass = MySQLdb.cursors.DictCursor,client_flag = None):
        self.host = host
        self.user = user
        self.passwd = passwd
        self.dbname = dbname
        self.charset = charset
        self.autocommit = autocommit
        self.cursor = None
        self.connected = False
        #return No. based list or name based list
        self.cursorclass = cursorclass
        #match by FindRow count or UpdateRow coutn
        self.client_flag = client_flag
    
    
    def connect(self):
        self.conn = MySQLdb.connect(host=self.host,user=self.user,passwd=self.passwd,db=self.dbname,
            charset=self.charset)
        self.conn.autocommit(self.autocommit)
        self.connected = True
        
    def startTransaction(self):
        if not self.connected:
            self.connect()
    
    def commitTransaction(self):
        self.cursor.close() 
        self.conn.commit()  
    
    def endTransaction(self):
        pass
    
    def rollbackTransaction(self):
        self.cursor.close()  
        self.conn.rollback()  
    
    
    def query(self, sql,params = None):
        try:
            if self.cursorclass:
                self.cursor = self.conn.cursor(self.cursorclass)
            else: self.cursor = self.conn.cursor()
            self.cursor.execute(sql,params)
        except (AttributeError, MySQLdb.OperationalError):
            self.connect()
            if self.cursorclass:
                self.cursor = self.conn.cursor(self.cursorclass)
            else: self.cursor = self.conn.cursor()
            self.cursor.execute(sql,params)
        except MySQLdb.Error as e:
            print("Error {}: {}, sql:({}),params:({}) ".format( e.args[0],e.args[1] , sql,params) )
            if not self.autocommit:
                self.rollbackTransaction()
            print (traceback.format_exc())
            return False
        return self.cursor

        
    def getInsertId(self):
        returnid = None
        try:
            returnid = self.conn.insert_id()
        except (AttributeError, MySQLdb.OperationalError):
            self.connect()
            returnid = self.conn.insert_id()
        except MySQLdb.Error as e:
            print("{0}".format(e))
            print (traceback.format_exc())
        return returnid
                
    def close(self):
        if  hasattr(self, 'conn') and self.conn:
            self.conn.close()
class DBTransaction(DB):
    def __init__(self,host=GConfig.db_host,user=GConfig.db_user,passwd=GConfig.db_pass,
        dbname=GConfig.db_name,charset="utf8"):
        # super().__init__(host = host,user = user,passwd = passwd,dbname = dbname,charset = charset,autocommit = False)
        super(self.__class__, self).__init__(host, user,passwd,dbname,charset,False)

if __name__ == '__main__':
    db = DB()   
    cur = db.query("select * from test").fetchone()
    print (cur)
    db.close()
    
    # db =DBTransaction()
    # db.startTransaction()
    # db.query("truncate table test.test")
    # db.query("insert into test.test(state,type,date ) values( '7','5','5')")
    # db.query("insert into test.test(state,type,date ) values( '8','5','5')")
    # db.commitTransaction()
    # db.close()
    
    # db =DBTransaction()
    # db.startTransaction()
    # db.query("insert into test.test(state,type,date ) values( '9','9','5')")
    # db.query("insert into test.test(id,state,type,date ) values( 1,'3','5','5')")
    # db.commitTransaction()
    # db.close()

标签:__,self,db,cursor,def,conn,mysql,连接,python3
From: https://www.cnblogs.com/brian-sun/p/18460957

相关文章

  • Docker中Mysql容器内如何执行SQL文件?
    Docker中Mysql容器内如何执行SQL文件?查看当前运行的容器dockerps拷贝sql文件到mysql容器中sudodockercp/root/sqlfile/423d23129a6b:/home/temp将sqlfile文件夹下的init.sql数据库拷贝到【423d23129a6b容器】下的/home/temp/文件夹下。进入mysql容器内部dockerex......
  • MySQL命令rebootClusterFromCompleteOutage重启集群注意事项
    rebootClusterFromCompleteOutage()是MySQLShell中的一个实用命令,用于在InnoDB集群遇到完全中断(例如,当组复制在所有成员实例上停止时)后重新配置和恢复集群。这个命令允许你连接到集群中的一个MySQL实例,并使用该实例的元数据来恢复整个集群。在MySQLShell中使用rebootClust......
  • Ubuntu连接手机热点设置静态IP
    参考:https://www.cnblogs.com/jkcx/p/17784420.htmlhttps://blog.csdn.net/weixin_45112150/article/details/136620497ChatGPT第一步:查看各种参数信息包括:使用ipaddr在终端中查看网卡和动态分配的IP使用iprouteshow在终端中查看默认网关(DefaultGateway)/路由(路......
  • MySQL 读写分离
    优质博文:IT-BLOG-CN一、背景随着机票业务不断增长,订单库的读性能遇到了挑战,因此对订单库进行读写分离操作。主要目的是提高数据库的并发性能和可扩展性。当系统的所有写操作效率尚可,读数据请求效率较低时,比如之前订单表存放了几千万条数据,且查询订单信息需要关联十几个字......
  • MySql.Data.dll官网下载
    原文链接:https://blog.csdn.net/weixin_30668887/article/details/96468519Mysql.Data.dll官网下载在项目开发中链接MySQL数据库经常要用到Mysql.Data.dll,网上虽然有很多,但是还是比较信赖官网的今天就从官网下载一次记录一下过程1.下载地址官网地址:https://www.mysql.com/2.......
  • ThreadLocal和连接池
    ThreadLocal线程隔离工具用来存储一些只有线程才可以访问的内容。你可能会想,既然我只想本线程才能访问,那么我使用局部变量不就行了吗?局部变量的问题在于它只能存在于本方法内部,没有办法让本线程内的其他方法访问使用。publicstaticvoidmain(String[]args){Run......
  • Leetcode 1192. 查找集群内的关键连接
    1.题目基本信息1.1.题目描述力扣数据中心有n台服务器,分别按从0到n-1的方式进行了编号。它们之间以服务器到服务器的形式相互连接组成了一个内部集群,连接是无向的。用connections表示集群网络,connections[i]=[a,b]表示服务器a和b之间形成连接。任何服务器都可......
  • ORCLE与MySQL的相互转化
    1.情景展示在实际开发中,不同的地方可能所需使用的数据库是不同的。这就要求,我们开发的程序需要兼容不同的数据库,放到程序里面就是:需要有不同类型的sqlMap文件。以既要兼容MySQL,也要兼容Oracle进行举例说明。2.准备工作第一步根据已经写好的一套sql进行复制,然后,在原有sql的......
  • cmakelist 源码生成so 文件 orthanc mysql
    cmakelist.txt#Orthanc-ALightweight,RESTfulDICOMStore#Copyright(C)2012-2016SebastienJodogne,MedicalPhysics#Department,UniversityHospitalofLiege,Belgium#Copyright(C)2017-2023OsimisS.A.,Belgium#Copyright(C)2024-2024Orthanc......
  • Mac 最大连接数和端口的相关参数
    1.最大连接数限制最大连接数限制就是系统所能打开的最大文件数(文件描述符)的限制,分全局和进程两种:1.1.全局$sysctlkern.maxfileskern.maxfiles:49152##系统默认的最大连接数限制是49152$sudosysctl-wkern.maxfiles=1048600###设置系统最大连接数从49152到10......