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

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

          • -

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

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

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

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


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

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

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

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

C++/Python连接MySql数据库配置教程

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

测试demo代码

<pre class="has">

include "pch.h"

include

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 
#include 
#include 

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进行连接:**

  
  
  
  
  
```
```python
"""
封装一个操作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)
```

标签: C++, result, Python, mysql, include, res, self, sql, MySql

相关文章推荐

添加新评论,含*的栏目为必填