C++连接mysql
// 使用 mysql 提供的进行数据库编程,需要保证当前的应用哦个// 程序版本(x86/x64),库文件版本和本机的数据库完全一致。需// 要将安装目录下的整个 inlcude 文件夹和 lib 路径下的 // libmysql.lib 和 libmysql.dll 拷贝当当前的项目路径下#include <stdio.h>#include <windows.h>#include "include/mysql.h"#pragma comment(lib, "libmysql.lib")// 检查数据库的执行是否成功void check(MYSQL* mysql){ // mysql_errno 返回的是错误码 if (mysql_errno(mysql) != 0) { // mysql_error 返回的是错误信息 printf("连接数据库出错: %s\n", mysql_error(mysql)); system("pause"); exit(0); }}// 向指定的表中添加数据void insert(MYSQL* mysql, LPCSTR sql){ // 直接执行添加数据的操作 mysql_query(mysql, sql); // 需要检查数据是否添加成功 check(mysql);}// 查询指定的数据void select(MYSQL* mysql, LPCSTR sql){ // 直接执行添加数据的操作 mysql_query(mysql, sql); check(mysql); // 获取到查询的结果值 MYSQL_RES* pRes = NULL; pRes = mysql_use_result(mysql); check(mysql); // 获取到查询结果有多少 int nColCount = mysql_num_fields(pRes); // 输出每一列的列名 MYSQL_FIELD* pField = nullptr; for (int i = 0; i < nColCount; ++i) { // 从结果中获取到每一列的名称 pField = mysql_fetch_field(pRes); // 某一些情况下不存在列名不存在的就是 null if (pField == nullptr) continue; printf("%s | ", pField->name); } puts(""); // 输出每一个查询到的字段 MYSQL_ROW row = nullptr; while (row = mysql_fetch_row(pRes)) { // 获取每一行的信息 for (int i = 0; i < nColCount; ++i) { // 需要提防产生空指针的情况 if (row[i] != nullptr) printf("[%s] ", row[i]); else printf("[null] "); } printf("\n"); }}int main(int argc, char* argv[]){ // 修改控制台的默认字符编码 system("chcp 65001"); // 1. 初始化 mysql 数据库 mysql_library_init(argc, argv, nullptr); // 2. 操作 mysql 数据库需要提供一个 MYSQL 对象 MYSQL mysql = { 0 }; mysql_init(&mysql); // 3. 连接数据库,需要提供明文的数据库信息 mysql_real_connect(&mysql, "127.0.0.1", "root", "66666666", "my_table", 3306, nullptr, 0); check(&mysql); // 4. 向数据库中添加信息 // insert(&mysql, "INSERT INTO my_class(m_name, m_count) VALUE('41', 41);"); // 5. 从数据库中查询信息 select(&mysql, "SELECT * FROM my_student;"); // 6. 清理 mysql 数据库 mysql_library_end(); return 0;}
python连接mysql
import pymysqlclass mysql(object): # 连接到数据库 def __init__(self): try: # 创建连接对象,连接到数据库 self.connect = pymysql.connect(host="127.0.0.1", user="root", password="66666666", db="my_table") # 获取到游标对象,游标对象被用于执行查询操作 self.cursor = self.connect.cursor() except Exception as e: # 一旦出现问题,这里会打印错误信息 print(e) # 添加数据到表中 def insert(self, sql): try: # 使用 execute 执行 sql 指令 self.cursor.execute(sql) # 任何对 sql 数据库执行修改的操作都需要提交 self.connect.commit() except Exception as e: # 如果指令执行出错,理论应该回滚操作 self.connect.rollback() # 输出错误信息 print(e) # 查询数据,返回查询到的数据和数量 def select(self, sql): try: # 使用 execute 执行 sql 指令 self.cursor.execute(sql) # 使用 fetchall 获取所有结果 result = self.cursor.fetchall() # 使用 rowcount 获取返回的条目数量 count = self.cursor.rowcount # 查询到的结果是一个由所有的条目组成的元组 # 元组的每一个元素又是一个元组,这个元组中 # 保存的是查询到的每一列的信息 return count, result except Exception as e: # 如果指令执行出错,理论应该回滚操作 self.connect.rollback() # 输出错误信息 print(e)if __name__ == "__main__": sql = mysql() # sql.insert("INSERT INTO my_class VALUE(43, '43', 43);") print(sql.select("SELECT * FROM my_student;"))