-
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)