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 pymysql
class 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;"))