最近在做项目时需要连接数据库进行测试,于是需要先把Excel数据导入到数据库里面去,Python 操作sql server数据库的代码大致如下(操作mysql 代码和这个差不多,只是包和连接信息的不同,可以自行百度):

import pymssql
import pandas as pd

server = "192.168.20.236:1433"#数据库地址以及端口
user = "sa"#用户名
password = "123"#密码
database = "test"#要操作的数据库名称
conn = pymssql.connect(server, user, password, database)#连接
cur = conn.cursor()#游标对象

df1=pd.read_excel(r'source.xlsx')#用pandas读取要导入数据库的文件
lists=df1['医院名称'].astype(str)#将医院名称那一整列的数据变成str类型的
def insert_sql():
    all_doc = (x for x in lists)#生成一个生成器,便于等会访问医院名称那一列的所有数据
    sql2 = "insert into python(hospital) values ('{}')"#构造sql server 数据库插入语句

    n = 0#初始化一个变量用来计数,当然,也可以使用enumerate()来达到相同的目的
    for i in all_doc:
        n = n + 1
        info2 = str(i)将要插入的数据变成str类型
        sql=sql2.format(info2)#构造sql语句
        cur.execute(sql)执行sql 语句
        print('done {}'.format(n))

    cur.connection.commit()#执行commit操作,插入语句才能生效
if __name__=='__main__':
    try:
        insert_sql()#调用插入函数
    finally:#关闭数据库
        conn.close()

这里需要特别注意的是,执行完excute那一行语句以后,一定一定要记得写commit语句,不然的话,数据库插入操作是不会成功的!!!

 

还有,我这里是在for循环里面执行了所有的sql语句,调出for循环才执行的commit语句,究其原因,是因为效率问题,如果执行一条sql语句,commit一次,那么效率大大降低,如果执行完所有的sql语句再commit,那么效率将会大大的提升

 

最后,还碰到一个问题就是在执行程序的时候,在navicat里面想要看看数据是否插入成功,会出现程序卡死的状况,这个问题是因为启动了太多插入程序造成的,就像下图:

在不断的调试过程中,不知不觉,运行了同一个程序多次,那么,就会造成Navicat卡死,解决方法显而易见,停止多余的程序就好了

Logo

更多推荐