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