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)

 

 

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