python连接数据库sql server格式_Python连接SQL Server数据库

相关介绍

安装pymssql,需安装2005版本以上的SQL Server

pip install pymssql

pymssql使用较为简单

使用 pymssql.connect(server,user,password,database) 创建连接对象;

使用 connection.cursor() 获取连接的游标对象,与数据库的各种交互基本都在游标上执行,一个连接一次只能有一个游标的查询处于活跃状态;

使用 cursor.executeXXX() 执行SQL语句,使用 cursor.fetchXXX()获取查询结果 获取查询结果,可以一次获取所有数据,一次获取一行数据;

如果对数据库中数据进行了修改,需使用 connection.commit() 提交结果,否则数据库内的数据不会有变化

使用 connection.close() 关闭连接

连接数据库

常规连接

importpymssql

server="localhost"user=""password=""database=""conn= pymssql.connect(server,user,password,database,as_dict=True,charset='utf8')#as_dict 设置返回数据类型为字典,否则为元组 ,返回字典类型便于转成DataFrame类型#charset 设置数据库的字符集

cur = conn.cursor()

用嵌套函数连接数据库

以明文的形式定义数据库连接在程序中非常简便,但隐私性相对弱。而Python函数的一大特性就是Python支持函数的嵌套,就是指函数里又有函数。

函数的嵌套,主要有下面两个方面的作用

函数的嵌套能保证内部函数的隐私。内部函数只能被外部函数所调用和访问,不会暴露在全局作用域,因此,如果你的函数内部有一些隐私数据(比如数据库的用户、密码等),不想暴露在外,那你就可以使用函数的的嵌套,将其封装在内部函数中,只通过外部函数来访问。

合理的使用函数嵌套,能够提高程序的运行效率

#这里的函数 get_DB_configuration,便是内部函数,它无法在#connect_DB() 函数以外被单独调用。我们只能通过调用外部函数#connect_DB() 来访问它,这样一来,程序的安全性便有了很大的提高

defconnect_DB():defget_DB_configuration():

Lines=[]

with open('conn.txt','r',encoding='utf-8') as f:for line inf:

Lines.append(line)

servername,username,password,db= Lines[0],Lines[1],Lines[2],Lines[3]

dic="as_dict=True"char="charset='utf8'"

returnservername,username, password,db,dic,char

conn=pymssql.connect(get_DB_configuration())return conn

查询与获取数据

#创建游标,用以对数据库进行操作

cur =conn.cursor()#下面编写SQL语句,多行文本用三个引号

sql_difftime = '''SELECT * FROM(

SELECT IC.id,IC.card,IC.time AS ICTIME,

GPS.gmtTime AS GPSTIME, DATEPART(HH,IC.time) AS IC_Hour,

ABS(DATEDIFF(ss,IC.time,gmtTime)) AS DIFFTIME,GPS.stationSeqNum

FROM GPS INNER JOIN IC ON GPS.srcAddr = IC.car_id

) AS TEMP

WHERE DIFFTIME<301

order by id,DIFFTIME'''

#执行查询语句

cur.execute(sql_difftime)#获取查询数据,每条数据以字典形式返回

data =cur.fetchall()#将数据转化为Dataframe类型

df =pd.DataFrame(data)#关闭游标

cur.close()

编写查询语句时,可能会需要格式控制输出

sql_var = '''SELECT [gps_id],[longitude],[latitude],[gps_time],[direction],[amap_line],[gps_date]

FROM [GAODE_BUS].[dbo].[wangjing.gps]

WHERE [gps_date]={date_number} AND[amap_line]='{line_number}'

ORDER BY [gps_id] DESC ,[gps_time]'''.format(date_number=gps_date_list[jj],line_number=amap_line_list[ii])#采用格式控制输出,在语句中,用{}进行占位#用.format进行数据控制

获取数据主要用 cur.fetchXXX()进行 ,下面进行详细讲解

#可以使用for循环迭代查询结果

for row incur:print(row)#只取表中第一条数据

cur.fetchone()#显示多条数据

cur.fetchmany(5)#取全部数据

cur.fetchall()

修改数据库中的数据

#插入多条记录用 cur.executemany()

cursor.executemany("INSERT INTO persons VALUES (%d, %s, %s)",

[(1, 'John Smith', 'John Doe'),

(2, 'Jane Doe', 'Joe Dog'),

(3, 'Mike T.', 'Sarah H.')])#记得进行提交

conn.commit()

关闭游标和连接可以使用以下语句

ifcur:

cur.close()ifconn:

conn.close()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值