C++PyMysql 의 기본 기능 인 스 턴 스 상세 설명 실현
PyMysql
Thmysql(C++)
Thmysql(Python)
connect
connect
connect
cursor
――
――
execute
execute
execute
fetchone
fetchone
fetchone
fetchall
fetchall
fetchall
close
close
close
개발 환경
# :python_test.py
import pymysql
# database
conn = pymysql.connect(host="localhost",user="root",password="123456",
database="test",charset="utf8")
# SQL
cursor = conn.cursor() #
# SQL
cursor.execute("use information_schema")
cursor.execute("select version();")
first_line = cursor.fetchone()
print(first_line)
cursor.execute("select * from character_sets;")
res = cursor.fetchall()
print(res)
#
cursor.close()
#
conn.close()
개발 절차
// :thmysql.h
#include <Windows.h>
#include "mysql.h"
#include <iostream>
#include <string>
#include <vector>
#pragma comment(lib, "lib/libmysql.lib")
using namespace std;
typedef struct MysqlInfo{
string m_host;
string m_user;
string m_passwd;
string m_db;
unsigned int m_port;
string m_unix_socket;
unsigned long m_client_flag;
MysqlInfo(){}
MysqlInfo(string host, string user, string passwd, string db, unsigned int port,
string unix_socket, unsigned long client_flag){
m_host = host;
m_user = user;
m_passwd = passwd;
m_db = db;
m_port = port;
m_unix_socket = unix_socket;
m_client_flag = client_flag;
}
}MysqlInfo;
class Thmysql{
public:
Thmysql();
void connect(MysqlInfo&);
void execute(string);
vector<vector<string>> fetchall();
vector<string> fetchone();
void close();
private:
MYSQL mysql;
MYSQL_RES * mysql_res;
MYSQL_FIELD * mysql_field;
MYSQL_ROW mysql_row;
int columns;
vector<vector<string>> mysql_data;
vector<string> first_line;
};
// :thmysql.cpp
#include <iostream>
#include "thmysql.h"
Thmysql::Thmysql(){
if(mysql_library_init(0, NULL, NULL) != 0){
cout << "MySQL library initialization failed" << endl;
}
if(mysql_init(&mysql) == NULL){
cout << "Connection handle initialization failed" << endl;
}
}
void Thmysql::connect(MysqlInfo& msInfo){
string host = msInfo.m_host;
string user = msInfo.m_user;
string passwd = msInfo.m_passwd;
string db = msInfo.m_db;
unsigned int port = msInfo.m_port;
string unix_socket = msInfo.m_unix_socket;
unsigned long client_flag = msInfo.m_client_flag;
if(mysql_real_connect(&mysql, host.c_str(), user.c_str(), passwd.c_str(), db.c_str(),
port, unix_socket.c_str(), client_flag) == NULL){
cout << "Unable to connect to MySQL" << endl;
}
}
void Thmysql::execute(string sqlcmd){
mysql_query(&mysql, sqlcmd.c_str());
if(mysql_errno(&mysql) != 0){
cout << "error: " << mysql_error(&mysql) << endl;
}
}
vector<vector<string>> Thmysql::fetchall(){
// sql
mysql_res = mysql_use_result(&mysql);
//
columns = mysql_num_fields(mysql_res);
//
mysql_field = mysql_fetch_fields(mysql_res);
mysql_data.clear();
while(mysql_row = mysql_fetch_row(mysql_res)){
vector<string> row_data;
for(int i = 0; i < columns; i++){
if(mysql_row[i] == nullptr){
row_data.push_back("None");
}else{
row_data.push_back(mysql_row[i]);
}
}
mysql_data.push_back(row_data);
}
// mysql_free_result :Commands out of sync; you can't run this command now
mysql_free_result(mysql_res);
return mysql_data;
}
vector<string> Thmysql::fetchone(){
// sql
mysql_res = mysql_use_result(&mysql);
//
columns = mysql_num_fields(mysql_res);
//
mysql_field = mysql_fetch_fields(mysql_res);
first_line.clear();
mysql_row = mysql_fetch_row(mysql_res);
for(int i = 0; i < columns; i++){
if(mysql_row[i] == nullptr){
first_line.push_back("None");
}else{
first_line.push_back(mysql_row[i]);
}
}
mysql_free_result(mysql_res);
return first_line;
}
void Thmysql::close(){
mysql_close(&mysql);
mysql_library_end();
}
// :thmysql_wrapper.cpp
#include "pybind11/pybind11.h"
#include "pybind11/stl.h"
#include "thmysql.h"
namespace py = pybind11;
PYBIND11_MODULE(thmysql, m){
m.doc() = "C++ Mysql";
py::class_<MysqlInfo>(m, "MysqlInfo")
.def(py::init())
.def(py::init<string, string, string, string, unsigned int, string, unsigned long>(),
py::arg("host"), py::arg("user"), py::arg("passwd"), py::arg("db"),py::arg("port"),
py::arg("unix_socket") = "NULL", py::arg("client_flag")=0)
.def_readwrite("host", &MysqlInfo::m_host)
.def_readwrite("user", &MysqlInfo::m_user)
.def_readwrite("passwd", &MysqlInfo::m_passwd)
.def_readwrite("db", &MysqlInfo::m_db)
.def_readwrite("port", &MysqlInfo::m_port)
.def_readwrite("unix_socket", &MysqlInfo::m_unix_socket)
.def_readwrite("client_flag", &MysqlInfo::m_client_flag);
py::class_<Thmysql>(m, "Thmysql")
.def(py::init())
.def("connect", &Thmysql::connect)
.def("execute", &Thmysql::execute, py::arg("sql_cmd"))
.def("fetchall", &Thmysql::fetchall)
.def("fetchone", &Thmysql::fetchone)
.def("close", &Thmysql::close);
}
# :setup.py
from setuptools import setup, Extension
functions_module = Extension(
name='thmysql',
sources=['thmysql.cpp', 'thmysql_wrapper.cpp'],
include_dirs=[r'D:\software\pybind11-master\include',
r'D:\software\Anaconda\include',
r'D:\project\thmysql\include'],
)
setup(ext_modules=[functions_module])
5.Thmisql 데이터베이스 조회
# :test.py
from thmysql import Thmysql, MysqlInfo
info = MysqlInfo("localhost", "root", "123456", "", 3306)
conn = Thmysql()
# database
conn.connect(info)
# SQL
conn.execute("use information_schema")
conn.execute("select version();")
first_line = conn.fetchone()
print(first_line)
conn.execute("select * from character_sets;")
res = conn.fetchall()
print(res)
#
conn.close()
총결산
C++PyMysql 의 기본 기능 을 실현 하 는 이 글 은 여기까지 소개 되 었 습 니 다.더 많은 관련 c+pymysql 내용 은 우리 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 조회 하 시기 바 랍 니 다.앞으로 많은 응원 바 랍 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
hdu 1717 소수 화 점수 2 (수학)소수 화 점수 2 레이 는 수학 시간 에 선생님 의 말씀 을 듣 고 모든 소수 가 점수 로 표시 되 는 형식 이 라 고 말 했다. 그 는 녹 기 시 작 했 고 곧 완성 되 었 다. 그러나 그 는 또 하나의 문 제 를...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.