SQL Server数据导入Redis的简单方法

最近看了一篇文章,是讲如何通过命令行,把mysql中的数据导入到redis中的。


文中作者的思路是用sql语句来构建redis的命令,然后mysql执行这个sql语句,把sql语句的输出结果,通过管道输出到redis的客户端程序执行这些命令,从而把数据加载到redis。

原文作者用的是linux系统,而本文用的是windows,数据库用的是SQL Server,这个是最大的区别,所以具体的命令行也是完全不一样的。


关于redis的安装,可以参考我的前一篇文章:

【Redis学习点滴】Windows下的Redis安装、测试就是这么简单


1、准备工作。

这里新建了一个数据库TEST,然后切换到test数据库。

创建了一张表test,其中有3个字段,这里用的到是user_name和value两个字段,存储的是某个用户的账户余额,插入6条数据。

--创建一个数据库TEST
create database TEST;

use test
go;


--创建Test表
create table test
(
user_id int primary key,
user_name varchar(30),
value numeric(10,2)
);


insert into test
select 1,'alice',100.2
union all
select 2,'grace',100.2
union all
select 3,'eili',100.2
union all
select 4,'mandy',100.2
union all
select 5,'sophie',100.2
union all
select 6,'jerry',100.2


select * from test

2、通过select语句构建redis命令

首先要说的是这里要构建的是redis的hset命令,也就是把数据库表中的数据导入redis时,用的是hash类型来存储数据的。

redis中当我们要把数据存储到hash中时,具体的命令是这样的:

hset test 键名称 键值


这里在c盘下,创建了名为:s.sql 的文件,文件中的sql语句如下:

set nocount on;

select 'HSET '+'test '+user_name+' '+cast(value as varchar)
from test

注意,这里的set nocount on是设置sql语句执行时,不返回消息,因为这些消息也会作为redis命令来运行,所以会导致redis执行报错。

这个sql语句中,hset是redis中设置散列的命令,test是这个散列的名称,那么user_name的值就是这个散列中的一个key,而value就是这个key对应的值。


输出结果:



3、通过sqlcmd命令行运行sql

对于mysql来说,你可以用mysql客户端命令 mysql来运行sql语句,而对于sql server,我是用sqlcmd命令行来运行文件中的sql的。

这里为了做实验,把输出结果放到一个文件中,具体的命令行如下:

C:\Users\Administrator>sqlcmd -S ggg-pc\sql2014 -U sa -P ggg -d Test -h -1 -i c:\s.sql > c:\c.txt

这里稍微解释一下sqlcmd命令行参数:

-S:服务器,这里的ggg-pc是服务器名称,sql2014是实例名称,一般如果在同一个机器上安装了多个sql server时候,用于区分不同的实例

-U:用户名

-P:密码

-d:数据库名称

-h:当为-1时,运行结果中不输出字段名称

-i:要运行sql文件

>:这个是重定向,本来输出结果是打印到屏幕上的,现在重定向到 c.txt文件中。


查看c盘下的c.sql文件:



4、把sql的输出结果直接通过管道,输出到redis-cli客户端程序。

命令如下:

C:\Users\Administrator>sqlcmd -S ggg-pc\sql2014 -U sa -P yupeigu -d Test -h -1 -i c:\s.sql | e:\redisbin_x64\redis-cli
(integer) 1
(integer) 1
(integer) 1
(integer) 1
(integer) 1
(integer) 1

从返回值来看,都是返回的1,说明值都写入成功了。


接下来,启动redis-cli客户端程序,在redis中查看这些值:



从上图可以看出,数据已经从sql server中的Test数据库,导入到redis中大笑


好的,这是一个比较复杂的任务,需要分几步来完成。首先,我们需要安装一些必要的库,包括pandas、pyodbc、redis、apscheduler等。请确保这些库都已经安装在你的电脑上。可以使用 pip install pandas pyodbc redis apscheduler 命令来安装。 接下来,我们需要编写代码来完成上述任务。具体实现步骤如下: 1. 导入必要的库 ```python import pandas as pd import pyodbc import redis from apscheduler.schedulers.blocking import BlockingScheduler from datetime import datetime ``` 2. 连接到 SQL Server 数据库,并获取数据 ```python server = 'localhost' database = 'mydatabase' username = 'myusername' password = 'mypassword' driver = '{ODBC Driver 17 for SQL Server}' # 连接数据库 conn = pyodbc.connect('DRIVER=' + driver + ';SERVER=' + server + ';DATABASE=' + database + ';UID=' + username + ';PWD=' + password) # 查询数据 df = pd.read_sql('SELECT * FROM mytable', conn) ``` 3. 将数据保存为 CSV 文件 ```python df.to_csv('data.csv', index=False) ``` 4. 使用 pandas 分析数据,并生成 json 格式数据 ```python # 统计数据 data = df.groupby(['category'])['value'].sum().reset_index() # 生成 json 格式数据 json_data = data.to_json(orient='records') ``` 5. 连接到 Redis 数据库,并将生成的 json 数据保存到 Redis 中 ```python # 连接 Redis 数据库 r = redis.Redis(host='localhost', port=6379, db=0) # 保存数据Redis 中 r.set('data', json_data) ``` 6. 使用 apscheduler 模块设置定时任务 ```python def job(): # 任务代码 pass # 创建定时任务 scheduler = BlockingScheduler() scheduler.add_job(job, 'cron', hour='*', minute=5) # 启动定时任务 scheduler.start() ``` 将上述代码保存为一个 Python 文件,例如 chitgpt.py,并在后台运行该程序即可。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值