zoukankan      html  css  js  c++  java
  • python操作数据库-SQLSERVER-pyodbc

    刚开始学python时,大家都习惯用pymssql去读写SQLSERVER。但是实际使用过程中,pymssql的读写性能以及可靠性的确不如pyodbc来的好。

    正如微软官方推荐使用pyodbc库,作为学习以及生产环境使用。参考链接 https://docs.microsoft.com/en-us/sql/connect/python/python-driver-for-sql-server?view=sql-server-2017  

    第一步、为pyodbc Python开发配置开发环境。

    1、在Windows上安装Microsoft ODBC SQL Server驱动程序

    window根据需要 安装

    Download Download Microsoft ODBC Driver 17 for SQL Server (x64)
    Download Download Microsoft ODBC Driver 17 for SQL Server (x86)

    linux以centos为例

    参考链接 https://docs.microsoft.com/en-us/sql/connect/odbc/linux-mac/installing-the-microsoft-odbc-driver-for-sql-server?view=sql-server-2017#redhat17

    sudo su
    
    #Download appropriate package for the OS version
    #Choose only ONE of the following, corresponding to your OS version
    
    #RedHat Enterprise Server 6
    curl https://packages.microsoft.com/config/rhel/6/prod.repo > /etc/yum.repos.d/mssql-release.repo
    
    #RedHat Enterprise Server 7
    curl https://packages.microsoft.com/config/rhel/7/prod.repo > /etc/yum.repos.d/mssql-release.repo
    
    #RedHat Enterprise Server 8 and Oracle Linux 8
    curl https://packages.microsoft.com/config/rhel/8/prod.repo > /etc/yum.repos.d/mssql-release.repo
    
    exit
    sudo yum remove unixODBC-utf16 unixODBC-utf16-devel #to avoid conflicts
    sudo ACCEPT_EULA=Y yum install msodbcsql17
    # optional: for bcp and sqlcmd
    sudo ACCEPT_EULA=Y yum install mssql-tools
    echo 'export PATH="$PATH:/opt/mssql-tools/bin"' >> ~/.bash_profile
    echo 'export PATH="$PATH:/opt/mssql-tools/bin"' >> ~/.bashrc
    source ~/.bashrc
    # optional: for unixODBC development headers
    sudo yum install unixODBC-devel

    完成odbc驱动的安装后,依赖环境就已经完成了

    第二步、安装pyodbc

    这个只要pip安装下就好了。

    pip install pyodbc

    第三步、如何使用pyodbc进行t-sql操作

    1)简单查询

    import pyodbc 
    # Some other example server values are
    # server = 'localhostsqlexpress' # 实列名称
    # server = 'myserver,port' # 如果实例是有特殊端口号的,默认1433
    server = 'tcp:myserver.database.windows.net' 
    database = 'mydb' 
    username = 'myusername' 
    password = 'mypassword' 
    cnxn = pyodbc.connect('DRIVER={ODBC Driver 17 for SQL Server};SERVER='+server+';DATABASE='+database+';UID='+username+';PWD='+ password)
    cursor = cnxn.cursor()
    
    cursor.execute("SELECT @@version;")
            # 第一种
            # rows = cursor.fetchall()
            # for row in rows:
            #     print(row)
            # 第二种
            # for row in cursor:
            #     print(row)
            # # 第三种
            # row=cursor.fetchone()
            # while row:
            #     print(row)
            #     row=cursor.fetchone()
     

    2)执行操作

    cursor.execute("""
    INSERT INTO SalesLT.Product (Name, ProductNumber, StandardCost, ListPrice, SellStartDate) 
    VALUES (?,?,?,?,?)""",
    'SQL Server Express New 20', 'SQLEXPRESS New 20', 0, 0, CURRENT_TIMESTAMP) 
    cnxn.commit()
    row = cursor.fetchone()
    
    while row: 
        print('Inserted Product key is ' + str(row[0]))
        row = cursor.fetchone()

    3)如何使用window验证

    cnxn = pyodbc.connect('DRIVER={ODBC Driver 17 for SQL Server};SERVER='+server+';DATABASE='+database+';Trusted_Connection=yes)

     第四步、利用c_mssql库

    c_mssql库是一个对pyodbc的封装、刚开始是用pymssql进行SQLSERVER进行操作。

    但是最近使用SSHTunnel 用跳板机进行SQLSERVER的连接时,线程的问题太严重,看了看官方文档微软现在都主推pyodbc了,那么我们也用pyodbc重新封装下吧。

    可以快速读取数据库的数据

    from c_mssql import DB_Config
    from c_mssql.mssql_source import Mssql_Source
    
    #配置一下需要读取的数据库
    item_db_config=DB_Config(server='127.0.0.1',user="item_db",password="password",database="item_db",port=1433)
    
    item_db=Mssql_Source(item_db_config)
    
    #读取单值
    print(item_db.get_value("SELECT GETDATE()"))
    
    #读取单行
    print(item_db.get_rowdict("SELECT top 1 * from item"))
    
    #读取datalist
    print(item_db.get_datalist("SELECT * from item"))

    利用拼接sql语句快速插入,不需要写sql语句,直接将datalist导入数据表中

    from c_mssql import DB_Config
    from c_mssql.mssql_source import Mssql_Source
    
    from c_mssql.mssql_dst import Mssql_Dst
    
    item_db_config=DB_Config(server='127.0.0.1',user="item_db",password="!QAZwsx",database="item_db",port=1433)
    item_db=Mssql_Source(item_db_config)
    item_dst=Mssql_Dst(item_db)
    
    #source_data需要插入的数据 
    #dst_table 需要插入的表
    #dst_title 需要插入的列 ,支持list和dict,也可以默认为None。 dict 是{"column":"类型"}
    #类型 ["string","binary","date","time","datetime","int","float","numeric","UUID","expression"]
    #source_title 是source的列。
    #batch是一批导入多少行
    item_dst.import_into_dst(source_data=[{"a":"aa","b":1}],dst_table="table_name",dst_title=None,source_title=None,batch=1000)
  • 相关阅读:
    sphinx 源码阅读之分词,压缩索引,倒排——单词对应的文档ID列表本质和lucene无异 也是外部排序再压缩 解压的时候需要全部扫描doc_ids列表偏移量相加获得最终的文档ID
    详细说明XML分解(两)—DOM4J
    JSP简单的练习-用户登记表
    设计师给了px显着的单位,Android要设置多少开发商dip、dp、sp?
    左右xcode的重构选项的一些理解
    unicode下一个,读取数据库乱码问题
    java中间==、equals和hashCode差额
    MIPS台OpenWrt在系统内的路由器Rust应用程序开发
    Android采取async框架文件上传
    ios-上拉电阻负载许多其他接口
  • 原文地址:https://www.cnblogs.com/Evan-fanfan/p/12694287.html
Copyright © 2011-2022 走看看