c++实现PyMysql的基本功能实例详解

  

用c++实现一个Thmysql类,实现Python标准库PyMysql的基本功能,并提供与PyMysql类似的API,并用pybind11将Thmysql封装为Python库。

  

           PyMysql   Thmysql (c++)   Thmysql (Python)               连接   连接   连接         光标   - - -   - - -         执行   执行   执行         fetchone   fetchone   fetchone         fetchall   fetchall   fetchall         关闭   关闭   关闭            

  

  
      <李> Windows64位操作系统,李   <李>的mysql 5.5.28 Win64 (x86);李   <李> pycharm 2019.1.1。   
  

        #文件名:python_test.py   进口pymysql   #连接数据库   康涅狄格州=pymysql.connect(主机=發ocalhost”,用户=案?密码为“123456”,   数据库=安馐浴?charset=" utf8 ")      #得到一个可以执行SQL语句的光标对象   光标=conn.cursor() #执行完毕返回的结果集默认以元组显示   #执行SQL语句   游标。执行(“使用information_schema”)      游标。执行(“选择版本();")   first_line=cursor.fetchone ()   打印(first_line)      游标。执行(“select * from character_sets;“)   res=cursor.fetchall ()   打印(res)   #关闭光标对象   cursor.close ()   #关闭数据库连接   conn.close ()      

 C + +实现PyMysql的基本功能实例详解

  

  
      <李>将mysql安装目录下的包括和自由文件夹拷到项目目录中,李   <李>将自由文件夹中的libmysql.dll文件拷到system32系统路径下,李   <李>定义MysqlInfo结构体,实现c++版的Thmysql类;李   <李>编写封装函数;李   <李>通过setuptools将c++代码编译为Python库。
      李   
  

     //文件名:thmysql.h   # include & lt; Windows.h>   # include“mysql.h”   # include & lt; iostream>   # include & lt; string>   # include & lt; vector>      # pragma评论(自由、“lib/libmysql.lib”)   使用名称空间性病;      typedef struct MysqlInfo {   字符串m_host;   字符串m_user;   字符串m_passwd;   字符串m_db;   unsigned int m_port;   字符串m_unix_socket;   无符号长m_client_flag;      MysqlInfo () {}   MysqlInfo (string主机、字符串用户字符串passwd,字符串db, unsigned int港口,   字符串unix_socket,无符号长client_flag) {   m_host=主机;   m_user=用户;   m_passwd=密码;   m_db=数据库;   m_port=端口;   m_unix_socket=unix_socket;   m_client_flag=client_flag;   }   }MysqlInfo;      类Thmysql {   公众:   Thmysql ();   无效的连接(MysqlInfo&);   无效执行(字符串);   vector比;fetchall ();   vectorfetchone ();   空白close ();   私人:   MYSQL MYSQL;   MYSQL_RES * MYSQL_RES;   MYSQL_FIELD * MYSQL_FIELD;   MYSQL_ROW MYSQL_ROW;   int列;   vector比;mysql_data;   vectorfirst_line;   };//文件名:thmysql.cpp   # include & lt; iostream>   # include“thmysql.h”      Thmysql: Thmysql () {   如果(mysql_library_init(0,空,空)!=0){   cout & lt; & lt;“MySQL库初始化失败”& lt; & lt;endl;   }   如果(mysql_init(和mysql)==NULL) {   cout & lt; & lt;“初始化连接句柄失败”& lt; & lt;endl;   }   }      空白Thmysql:连接(MysqlInfo&msInfo) {   字符串主机=msInfo.m_host;   字符串的用户=msInfo.m_user;   字符串passwd=msInfo.m_passwd;   字符串db=msInfo.m_db;   unsigned int port=msInfo.m_port;   字符串unix_socket=msInfo.m_unix_socket;   无符号长client_flag=msInfo.m_client_flag;      如果(mysql_real_connect(和mysql, host.c_str (), user.c_str (), passwd.c_str (), db.c_str (),   港口,unix_socket.c_str (), client_flag)==NULL) {   cout & lt; & lt;“无法连接到MySQL”& lt; & lt;endl;   }   }      空白Thmysql::执行(字符串sqlcmd) {   mysql_query(和mysql, sqlcmd.c_str ());      如果(mysql_errno(和mysql) !=0) {   cout & lt; & lt;错误:“& lt; & lt;mysql_error(和mysql) & lt; & lt;endl;   }   }      vector比;Thmysql:: fetchall () {//获取sql指令的执行结果   mysql_res=mysql_use_result(和mysql);//获取查询到的结果的列数   列=mysql_num_fields (mysql_res);//获取所有的列名   mysql_field=作用(mysql_res);   mysql_data.clear ();   而(mysql_row=mysql_fetch_row (mysql_res)) {   vector

c++实现PyMysql的基本功能实例详解