sql >> データベース >  >> RDS >> Sqlserver

SQL Server、Python、およびOS X

    概要

    Yosemiteバージョン10.10.1でMacを使用して、MSSQLServerデータベースに接続しようとしています。検索したところ、更新された詳細な回答が見つかりませんでした。そのため、このすばらしい記事からの記事を以下に示しますここ 。リンクが切れた場合に備えて、stackoverflowに追加しています。アイデアは、セットアップ/接続するために次のレイヤーを用意することです。

    レイヤー

    • パート1-pyodbc
    • パート2-freeTDS(tsqlで確認できます)
    • パート3-unixODBC(isqlで確認可能)
    • パート4-MSSQL(通常のPythonプログラムで確認できます)

    手順

    1. 自作をインストールする こちら から -これはMacOSXのパッケージマネージャーです。この記事は、別​​のパッケージマネージャー「MacPorts」の使用方法を示しています。私の指示では、彼らは自作です。基本的に、homebrewには、さまざまなバージョンのパッケージを保持するフォルダ「cellar」があります。通常のファイルを変更する代わりに、これらの自作パッケージを指します。

    2. Pyodbcをインストールする必要がありますが、pyodbcはデフォルトでiODBCドライバー(Macにインストールされています)を使用しますが、多くの人がそれを機能させるのに問題があります。したがって、unixodbcと呼ばれる代替手段を使用します。 、将来インストールする予定です。今のところ、unixodbcで動作するようにpyodbcのインストールを構成する必要があります。

    PyPiに移動し、pyodbctarballをダウンロードして解凍します。次に、setup.pyでこれらの行を変更します :

    elif sys.platform == 'darwin':
            # OS/X now ships with iODBC.
            settings['libraries'].append('iodbc')
    

    宛先:

    elif sys.platform == 'darwin':
            # OS/X now ships with iODBC.
            settings['libraries'].append('odbc')
    

    次に、python setup.py installを実行します。 。

    これにより、pyodbcのインストールではデフォルトでunixodbcドライバーが使用されます。完璧です!

    1. FreeTDSをインストールする brew install freetds --with-unixodbcを使用 (FreeTDSは、MacODBCとMSSQLServerの間にあるドライバーです。これ ここのグラフは、特定のMicrosoftServerバージョンに基づいて使用する必要があるTDSのバージョンを示しています。例えばMicrosoft SQL Server 2008用のtdsプロトコル7.2)。

    2. freetds.confを構成します ファイル(ファイルは「/usr/local/etc/freetds.conf」にある必要があります。Homebrewの場合は「/usr/local/Cellar/freetds/0.91_2/etc」と言うリンクですが、どこか違う可能性がありますバージョンによって異なります)。グローバルを編集し、データベース情報を最後に追加しました(何らかの理由で、「tds version =7.2」はエラーをスローしますが、8.0は機能しますが、それでも機能します):

      [global]
      # TDS protocol version
      tds version = 8.0
      
      [MYSERVER]
      host = MYSERVER
      port = 1433
      tds version = 8.0
      
    3. FreeTDSがインストールされていることを確認します 正しく:tsql -S myserver -U myuser -P mypassword (機能した場合は、このようなプロンプトが表示されます)

      locale is "en_US.UTF-8"
      locale charset is "UTF-8"
      using default charset "UTF-8"
      1>
      
    4. unixODBCをインストールします brew install unixodbcを使用 。

    5. unixODBC構成ファイルをセットアップします 、 odbcinst.iniが含まれます (ドライバー構成)、および odbc.ini (DSN構成ファイル)。デフォルトでは、私のファイルは/Library/ODBCにありました。 (注:私のユーザーライブラリ、別名/ Users / williamliu / Libraryではありません)。または、自作のインストールディレクトリ/usr/local/Cellar/unixodbc/<version>/etcにある可能性もあります。 。

    6. ' odbcinst.iniを開きます 'ファイルを追加してから、以下を追加します(注:MacPortsを使用する場合は異なります。Homebrewの場合、このファイルは自作バージョンへのリンクです。たとえば、私のものは'/usr/local/Cellar/freetds/0.91_2/lib/libtdsodbc.soにあります。 '):

      [FreeTDS]
      Description=FreeTDS Driver for Linux & MSSQL on Win32
      Driver=/usr/local/lib/libtdsodbc.so
      Setup=/usr/local/lib/libtdsodbc.so
      UsageCount=1
      
    7. ' odbc.iniを開きます '次に、以下を追加します(これは通常、odbcinst.iniと一緒です) :

      [MYSERVER]
      Description         = Test to SQLServer
      Driver              = FreeTDS
      Trace               = Yes
      TraceFile           = /tmp/sql.log
      Database            = MYDATABASE
      Servername          = MYSERVER
      UserName            = MYUSER
      Password            = MYPASSWORD
      Port                = 1433
      Protocol            = 8.0
      ReadOnly            = No
      RowVersioning       = No
      ShowSystemTables    = No
      ShowOidColumn       = No
      FakeOidIndex        = No
      
    8. unixODBCを確認する 正しくインストールされている:isql MYSERVER MYUSER MYPASSWORD 。接続できないというエラーが発生した場合は、-vを追加してください 詳細な出力が何であるかを確認し、それを修正します。それ以外の場合は、次のように表示されます:

      +---------------------------------------+
      | Connected!                            |
      |                                       |
      | sql-statement                         |
      | help [tablename]                      |
      | quit                                  |
      |                                       |
      +---------------------------------------+ 
      
    9. pyodbcが機能することを確認する Pythonプログラムで。シェルでpythonを実行するか、これを使用して.pyファイルを実行すると、クエリが返されます。

      import pyodbc
      import pandas
      import pandas.io.sql as psql
      
      cnxn = pyodbc.connect('DSN=MYSERVER;UID=MYUSER;PWD=MYPASSWORD')
      cursor = cnxn.cursor()
      sql = ("SELECT * FROM dbo.MYDATABASE")
      df = psql.frame_query(sql, cnxn)
      

    ドキュメント を参照できます。 この後、より多くの助けを得るためにpyodbcの。



    1. SQLServerデータベースをMYSQLデータベースに変換します

    2. ORD()の例– MySQL

    3. 他のpostgresqlスキーマにデータフレームを書き込むパンダ

    4. Laravel-整合性制約違反:1452子行を追加または更新できません:外部キー制約が失敗します