用python连接linux上的数据库,实现增删改查功能

用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;

}
这样就可以了,注释写的很清楚,有问题欢迎咨询。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值