一、连接数据库
#连接数据库
from sqlalchemy import create_engine
#格式
#engine = create_engine("mssql+pyodbc://登录名:密码@服务器名称/数据库名?driver=SQL+Server+Native+Client+10.0", encoding="utf8", echo=True)
#案例
engine1 = create_engine("mssql+pyodbc://ssd:sa123@192.168.12.106/NetworkData?driver=SQL+Server+Native+Client+10.0", encoding="utf8", echo=True)
二、在数据库中创建一个新表(备注:只要不是从数据库中读取或插入数据,其他在数据库中使用的语句都可以用execute函数,比如删除表中数据、添加表)
sql1 = """CREATE TABLE datanm1 (
time datetime,
data float ,
)""" #不能只用一个双引号
engine1.execute(sql1)
三、在新表中插入数据
#data为dataframe数据类型,每列数据类型要与表定义的数据类型相同
data.to_sql(name='datanm1',con=engine1,if_exists='append',index=False)
#append表示如果表存在,则在表中添加数据
#replace表示如果表存在,则替换表数据
四、取出表中的数据
#取出的数据也为dataframe数据类型
d=sql.read_sql("SELECT pv,pt FROM " + c + " where SensorID = '" + a_index + "' ORDER BY pt ", engine)
五、循环读取多个表中的数据
date=pd.date_range('2018/7/15','2018/7/16', freq='D')
a_index= '01130621007F41006' #某一个地点的sensorID
e = pd.DataFrame()
for j in date:
time = j.strftime("%Y%m%d")
c= 'HIS'+time
d1=sql.read_sql("select count(1) from sys.objects where name = '" + c + "' ", engine).iloc[0,0] #查询库中是否有某个表名的表
if d1 == 1:
d=sql.read_sql("SELECT pv,pt FROM " + c + " where SensorID = '" + a_index + "' ORDER BY pt ", engine)
e=e.append(d)