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)
  • 相关阅读:
    pc 端支付宝支付流程
    crontab
    Java集合之HashSet
    Java内存与垃圾收集知识总结
    Volley设计思想和流程分析
    java内部类
    HandlerThread源码分析
    IntentService源码分析
    Android消息机制:Looper,MessageQueue,Message与handler
    LeetCode340 Longest Substring with At Most K Distinct Characters
  • 原文地址:https://www.cnblogs.com/Evan-fanfan/p/12694287.html
Copyright © 2011-2022 走看看