用python连接linux上的数据库,实现增删改查功能
#用python连接linux上的数据库,实现增删改查功能
第一次写博客,刚入职场,可能以后想用它来记录自己的成长
对数据库的操作,简单的sql语言在后台很好改变数据库,但是现实中更多的是通过其它方法来访问数据库,进而实现对它的增删改查,数据表的结构是在服务器上设定,其它的数据是通过别的路径来访问改变。
先写一个客户端:
#include <winsock.h>
#include <windows.h>
#include <stdio.h>
#include
#include
#pragma comment(lib,“ws2_32.lib”)
using namespace std;
int main(int argc, char* argv[])
{
WORD sockVersion = MAKEWORD(2, 2);//初始化版本
WSADATA data;
if (WSAStartup(sockVersion, &data) != 0)
{
return 0;
}
//创建套接字
SOCKET sclient = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);//默认IPv4协议,套接字类型字节流,IPPROTO_TCP相当于0
if (sclient == INVALID_SOCKET)
{
printf("invalid socket !");
return 0;
}
//与远程服务器建立连接
struct sockaddr_in serAddr;
serAddr.sin_family = AF_INET;//是IPv4协议
serAddr.sin_port = htons(8888);//保证CPU的读的顺序一致
serAddr.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");//连接对方IP192.168.112.7
if (connect(sclient, (struct sockaddr *)&serAddr, sizeof(serAddr)) == SOCKET_ERROR)
{
printf("connect error !");
closesocket(sclient);
return 0;
}
for (int i = 0; i < 1000; i++)
{
std::string inputStr;
std::cin >> inputStr;
const char * sendData = inputStr.c_str();//获得数据
send(sclient, sendData, strlen(sendData), 0);//发送一千次
char recData[255];
int ret = recv(sclient, recData, 255, 0);
if (ret > 0)
{
recData[ret] = 0x00;//在最后加一个结束符,加结束符的原因是防止char打印很长
int result = std::atoi(recData);
//printf(recData);
printf("%s=%d",sendData, result);
}
}
closesocket(sclient);
WSACleanup();
return 0;
}
再写一个服务器:
#include <stdio.h>
#include <winsock.h>
#include <windows.h>
#include
#include
#pragma comment(lib,“ws2_32.lib”)
//#pragma warning(disable:4996)
int main(int argc, char* argv[])
{
//初始化WSA
WORD sockVersion = MAKEWORD(2, 2);//版本
WSADATA wsaData;
if (WSAStartup(sockVersion, &wsaData) != 0)
{
return 0;
}
//创建套接字
SOCKET slisten = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);//SOCK_STREAM用的是tcp
if (slisten == INVALID_SOCKET)
{
printf("socket error !");
return 0;
}
//绑定IP和端口
struct sockaddr_in sin;
sin.sin_family = AF_INET;
sin.sin_port = htons(8888);//绑定一个端口
sin.sin_addr.S_un.S_addr = INADDR_ANY;// inet_addr("192.168.119.25");//只能用这个连接
if (bind(slisten, (LPSOCKADDR)&sin, sizeof(sin)) == SOCKET_ERROR)
{
printf("bind error !");
}
//开始监听
if (listen(slisten, 5) == SOCKET_ERROR)//最多连接个数为5
{
printf("listen error !");
return 0;
}
//循环接收数据
SOCKET sClient;
struct sockaddr_in remoteAddr;
int nAddrlen = sizeof(remoteAddr);
//char revData[255];
printf("等待连接...\n");
sClient = accept(slisten, (SOCKADDR *)&remoteAddr, &nAddrlen);//接收客户地址和端口号
printf("接受到一个连接:%s \r\n", inet_ntoa(remoteAddr.sin_addr));//
while (1)
{
char revData[255] = {0};
//printf("等待连接...\n");
//sClient = accept(slisten, (SOCKADDR *)&remoteAddr, &nAddrlen);
if (sClient == INVALID_SOCKET)
{
printf("accept error !");
continue;
}
//接收数据
int ret = recv(sClient, revData, 254, 0);//结束符占一个字节
int result = 10;
//printf(ret);
if (ret > 0)
{
revData[ret] = 0x00;//字符串结束标志
printf(revData);
int num1 = 0;
int num2 = 0;
char opt = '0';
for (int i = 0; i < ret; i++) {
if (revData[i] <= '9'&&revData[i] >= '0') {
if (opt == '0') {
num1 = num1 * 10 + revData[i] - '0';
}
else {//运算符在中间 不等于'0'表示第一个数解析完毕 现在解析第二个数
num2 = num2 * 10 + revData[i] - '0';
}
}
else {
opt = revData[i];
}
}
switch (opt) {
case'+':
result = num1 + num2;
break;
case'-':
result = num1 - num2;
break;
case'*':
result = num1 * num2;
break;
case'/':
result = num1 / num2;
break;
default:
break;
}
}
//发送数据
std::ostringstream ss;
ss << result;
std::string sendStr = ss.str();
const char * sendData = sendStr.c_str();
int sen_length = strlen(sendData);
//const char * sendData = " \n";//你好,TCP客户端!
send(sClient, sendData, strlen(sendData), 0);
}
closesocket(sClient);
closesocket(slisten);
WSACleanup();
return 0;
}
这样就可以了,注释写的很清楚,有问题欢迎咨询。