通过python插入并查询mysql图片
时间: 2023-08-04 16:26:28 浏览: 201
可以使用Python的MySQL Connector模块来连接MySQL数据库,并使用BLOB类型的字段来存储图片数据。下面是一个简单的示例代码:
```python
import mysql.connector
from mysql.connector import Error
# 连接数据库
try:
conn = mysql.connector.connect(host='localhost',
database='mydb',
user='myuser',
password='mypassword')
if conn.is_connected():
print('Connected to MySQL database')
# 插入图片数据
with open('image.jpg', 'rb') as file:
image_data = file.read()
cursor = conn.cursor()
query = "INSERT INTO images (id, data) VALUES (%s, %s)"
cursor.execute(query, (1, image_data))
conn.commit()
print('Image data inserted successfully')
# 查询图片数据
cursor = conn.cursor()
query = "SELECT data FROM images WHERE id = %s"
cursor.execute(query, (1,))
record = cursor.fetchone()
with open('retrieved_image.jpg', 'wb') as file:
file.write(record[0])
print('Image data retrieved successfully')
except Error as e:
print(e)
finally:
conn.close()
print('Connection closed')
```
在这个示例中,我们假设有一个名为`images`的表,其中包 printf("请输入租借状态(0表示未租借,1表示已租借):");
scanf("%d", &rented);
printf("单车编号\t所在城市\t租借状态\t单价\t骑行次数\t骑行总时长\t总收入\n");
for (int i = 0; i < bike_count; i++) {
if (bike_list[i].rented == rented) {
printf("%d\t%s\t%s\t%.2f\t%d\t%d\t%.2f\n", bike_list[i].id, bike_list[i].city,
bike_list[i].rented ? "已租借" : "未租借", bike_list[i].price,
bike_list[i].ride_count, bike_list[i].ride_time, bike_list[i].income);
}
}
break;
}
case 4: { // 根据单价查询
float price;
printf("请输入单价:");
scanf("%f", &price);
printf("单车编号\t所在城市\t租借状态\t单价\t骑行次数\t骑行总时长\t总收入\n");
for (int i = 0; i < bike_count; i++) {
if (bike_list[i].price == price) {
printf("%d\t%s\t%s\t%.2f\t%d\t%d\t%.2f\n", bike_list[i].id, bike_list[i].city,
bike_list[i].rented ? "已租借" : "未租借", bike_list[i].price,
bike_list[i].ride_count, bike_list[i].ride_time, bike_list[i].income);
}
}
break;
}
default:
printf("无效的选择!\n");
break;
}
}
// 单车租借
void rent_bike() {
char name[MAX_NAME_LEN];
int id;
printf("请输入会员名:");
scanf("%s", name);
printf("请输入单车编号:");
scanf("%d", &id);
// 判断单车是否已租借
for (int i = 0; i < bike_count; i++) {
if (bike_list[i].id == id) {
if (bike_list[i].rented) {
printf("单车已被租借,请选择其他单车!\n");
return;
}
bike_list[i].rented = 1; // 修改单车状态为已租借
break;
}
}
// 添加租车信息
RentInfo rent;
rent.bike_id = id;
strcpy(rent.name, name);
rent.rent_time = time(NULL);
rent_list[rent_count++] = rent;
printf("租车成功!\n");
}
// 计算租金
float calculate_rent_fee(time_t rent_time, time_t return_time, float price) {
int minutes = (int)(difftime(return_time, rent_time) / 60.0);
return minutes * price;
}
// 单车归还
void return_bike() {
char name[MAX_NAME_LEN];
int id;
printf("请输入会员名:");
scanf("%s", name);
printf("请输入单车编号:");
scanf("%d", &id);
// 查找租车信息
int rent_index = -1;
for (int i = 0; i < rent_count; i++) {
if (rent_list[i].bike_id == id && strcmp(rent_list[i].name, name) == 0) {
rent_index = i;
break;
}
}
含一个`id`字段和一个`data`字段,`data`字段是BLOB类型的。我们首先打开一个 if (rent_index == -1) {
printf("未找到该租车信息!\n");
return;
}
名为`image.jpg`的图像文件,并将其作为二进制数据读取到变量`image_data`中 // 修改单车状态为未租借
for (int i = 0; i < bike_count; i++) {
if。然后,我们使用INSERT语句将图像数据插入到`images`表中。接下来,我们使用SELECT语句检索具有特定`id`值的图像数据,并将其写入名为`retrieved_image.jpg (bike_list[i].id == id) {
bike_list[i].rented = 0;
break;
}
}
`的文件中。
需要注意的是,将大量的图片数据存储在数据库中可能会对性能产生负 // 计算租金
RentInfo *rent = &rent_list[rent_index];
rent->return_time = time(NULL);
面影响。在许多情况下,更好的做法是将图片数据存储在本地文件系统中,并 rent->rent_fee = calculate_rent_fee(rent->rent_time, rent->return_time,
bike_list[id - 1].将其路径存储在数据库中。这样可以减少数据库的负担,并提高数据访问速度。
阅读全文