用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 ()
-
<李>将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 (); vector fetchone (); 空白close (); 私人: MYSQL MYSQL; MYSQL_RES * MYSQL_RES; MYSQL_FIELD * MYSQL_FIELD; MYSQL_ROW MYSQL_ROW; int列; vector 比;mysql_data; vector first_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的基本功能实例详解