API函数接口实现C++/Python连接MySQL数据库实现数据交互详解

  •                                                C++/python连接MySql数据库

        本文由博主经过查阅网上资料整理总结后编写,如存在错误或不恰当之处请留言以便更正,内容仅供大家参考学习。


1.C++调用MySQL的API进行连接:

      首先应该清楚的是,在MySQL数据库安装路径中官方就已经为我们提供了操作数据库的相关API函数,并已经封装在libmysql.dll和 libmysql.lib中,在C++工程或者其他工程中直接调用里面的函数即可。

      为了使新建的工程能够使用到相应ibmysql.dll和 libmysql.lib提供的函数接口,必然想到的是告诉编译器到什么地方读取这两个文件(两种方式:要么在编译器中添加包含这两个文件的路径,要么就是将这两个文件拷贝到当前工程中--推荐)

采用第一种方式,在编译器中添加mysql函数接口路径方法:

      1. 项目属性->C/C++ ->常规->附加包含目录:mysql安装目录的include路径

       2. 项目属性->链接器->常规->附加库目录:mysql安装目录的lib路径

        3.项目属性->链接器->输入->附加依赖项:增加libmysql.lib

       4.确定使用的平台与mysql一致:如果mysql是64位的就选X64,如果是32位的就选win32或者x86

     5.添加头文件 #include<mysql.h>  、#include <WinSock.h> //一定要包含这个,或者winsock2.h

测试demo代码

#include "pch.h"
#include <iostream>
#include <WinSock.h>
#include <mysql.h>

using namespace std;

MYSQL myCont;   //定义数据源指针(数据库连接后,操作需要这个指针)
MYSQL_RES *result=NULL;   // 数据库查询结果集保存的位置,可以使用mysql_store_result或mysql_use_result函数获得。
MYSQL_ROW sql_row;   //读到的内容保存在这个数组,通过row[0]按列读取

int main()
{
	const char user[] = "XNKF";
	const char pswd[] = "XNKF123";
	const char host[] = "localhost";
	const char table[] = "test";
	unsigned int port = 3306;
	
	int res;
	mysql_init(&myCont);
	if (mysql_real_connect(&myCont, host, user, pswd, table, port, NULL, 0))
	{	
		mysql_query(&myCont, "SET NAMES GBK"); //设置编码格式
		res = mysql_query(&myCont, "select * from doctor");//查询
		if (!res)
		{
			result = mysql_store_result(&myCont);
			if (result)
			{
				while (sql_row = mysql_fetch_row(result))//获取具体的数据
				{
					cout << "name:" << sql_row[0] << endl;
					cout << "index:" << sql_row[1] << endl;
				}
			}
		}
		else
		{
			cout << "query sql failed!" << endl;
		}
	}
	else
	{
		cout << "connect failed!" << endl;
	}
	if (result != NULL) mysql_free_result(result);
	mysql_close(&myCont);
	return 0;
}

采用第二种方式,将mysql函数接口文件拷到工程中:

此方法优点: 当你的工程在其他电脑上运行时候不需要重新配置更改mysql的路径,直接就可以运行

第一:在你MySQL安装目录下找到include文件夹,把它全部拷贝你的项目文件夹里,

第二:在你MySQL安装目录下找到  lib文件夹,打开 lib 文件夹 ,将libmysql.dll  和 libmysql.lib 拷贝你的项目文件夹里。

完成以上操作后就不需要进行如上述方法一那样添加路径步骤了,因为编译器已经能在自己的工程中找到相关的文件

接下来:添加头文件

#include <include\mysql.h>//引入mysql头文件(一种方式是在vc目录里面设置,一种是文件夹拷到工程目录,然后这样包含)

#include <WinSock.h> //一定要包含这个,或者winsock2.h

测试demo代码

#include "pch.h"
#include <iostream>
#include <WinSock.h>
#include <include\mysql.h>

using namespace std;

MYSQL myCont;   //定义数据源指针(数据库连接后,操作需要这个指针)
MYSQL_RES *result=NULL;   // 数据库查询结果集保存的位置,可以使用mysql_store_result或mysql_use_result函数获得。
MYSQL_ROW sql_row;   //读到的内容保存在这个数组,通过row[0]按列读取

int main()
{
	const char user[] = "XNKF";
	const char pswd[] = "XNKF123";
	const char host[] = "localhost";
	const char table[] = "test";
	unsigned int port = 3306;
	
	int res;
	mysql_init(&myCont);
	if (mysql_real_connect(&myCont, host, user, pswd, table, port, NULL, 0))
	{	
		mysql_query(&myCont, "SET NAMES GBK"); //设置编码格式
		res = mysql_query(&myCont, "select * from doctor");//查询
		if (!res)
		{
			result = mysql_store_result(&myCont);
			if (result)
			{
				while (sql_row = mysql_fetch_row(result))//获取具体的数据
				{
					cout << "name:" << sql_row[0] << endl;
					cout << "index:" << sql_row[1] << endl;
				}
			}
		}
		else
		{
			cout << "query sql failed!" << endl;
		}
	}
	else
	{
		cout << "connect failed!" << endl;
	}
	if (result != NULL) mysql_free_result(result);
	mysql_close(&myCont);
	return 0;
}

1.Python调用MySQL的API进行连接:

"""
封装一个操作MYSQL数据的类
"""
import pymysql
class MYSQLClass(object):
    def __init__(self, host, port, user, password, database):
        # 建立连接
        self.con = pymysql.connect(host=host,  #或者写成 localhost
            port=port,
            user=user,
            password=password,
            database=database,)
        # 创建一个游标
        self.cur =self.con.cursor()

    def __del__(self):
        # 析构方法
        self.cur.close()
        self.con.close()

    def find_one(self,sql):
        """
        :return:查询一条数据
        """
        self.res=self.cur.execute(sql)
        return self.cur.fetchone()

    def find_all(self,sql):
        """
        :return:查询所有数据
        """
        self.res=self.cur.execute(sql)
        return self.cur.fetchall()

    def insert(self,sql):
        """
        :param sql:
        :return: 向数据库中插入数据
        """
        self.res=self.cur.execute(sql)
        self.con.commit()

    def delet(self,sql):
        """
        :param sql:
        :return: 删除数据库中数据
        """
        self.res=self.cur.execute(sql)
        self.con.commit()

    def updata(self,sql):
        """
        :param sql:
        :return: 更新数据库中数据
        """
        self.res=self.cur.execute(sql)
        self.con.commit()

s = MYSQLClass('127.0.0.1', 3306, 'XNKF', 'XNKF123', 'test01')
sql = "SELECT * FROM student"
res=s.find_one(sql)
print(res)

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章