ホームページ  >  記事  >  バックエンド開発  >  Python を使用して SQLServer2000 に接続する方法の詳細な例

Python を使用して SQLServer2000 に接続する方法の詳細な例

Y2J
Y2Jオリジナル
2017-05-03 16:24:372096ブラウズ

この記事では主に Python による SQLServer2000 への接続方法を紹介し、Python によるデータベース接続の実装で発生する一般的な問題と関連する注意事項を例の形式で分析します。 Python が SQLServer2000 メソッドに接続する話。参考のために皆さんと共有してください。詳細は次のとおりです:

pymssql.sourceforge.net/ PYTHON が MSSQL に接続するための適切なアドレスを紹介します。

Python を使用する良い方法は、インターネット上で多くの既製のモジュールを見つけて、それらを直接ダウンロードして使用することです。急速な発展の理由の1つはこれです。今回は主にpmssqlモジュールの操作機能を勉強していきます!


インストール後にヘルプドキュメントを直接クエリして、このモジュールのいくつかの機能ヘルプドキュメントを表示できます。

1.

文字化けの問題を解決する方法

:

s.decode('gbk', 'ignore')
例えば、 String オブジェクト s を gbk の内部コードから UTF-8 に変換したい場合は、次のようにすることができます

s.decode('gbk').encode('utf-8')

ただし、実際の開発では、このメソッドは頻繁に例外を生成することがわかります:

UnicodeDecodeError: 'gbk' codec can't decode bytes in Position 30664-30665: 不正なマルチバイト シーケンス

これは、特に不正な文字が検出されたためです。場合によっては、C/C++ で書かれたプログラムでは、/xa3/xa0 や /xa4/x57 など、全角スペースがさまざまな方法で実装されることがあります。これらの文字は全角スペースのように見えますが、実際は全角スペースです。 「正当な」全角スペースではないため (実際の全角スペースは /xa1/xa1 です)、トランスコーディング プロセス中に例外が発生しました。

幸いなことに、tiny は完璧な解決策を見つけました (ドキュメントを注意深く読んでいないことで批判されました、汗...)

s.decode('gbk', 'ignore').encode('utf-8')

decode の関数プロトタイプは decode([encoding], [errors='strict'] ) であるため、 2 番目のパラメータを使用して、エラー処理戦略を制御できます。デフォルトのパラメータは、不正な文字が見つかったときに例外がスローされることを意味します。

に設定すると、不正な文字は無視されます。 replace、不正な文字は ? に置き換えられます

xmlcharrefreplace に設定すると、XML 文字参照が使用されます。

この方法は本当に役に立ちます。全角と半角の不正な文字をデータベースに保存する問題は、次のように解決できます。

文字エンコーディングの問題はいつも頭の痛い問題です、笑!

2.www.python.org/dev/peps/pep-0249/

上記は、Python-DBAPI の共通操作機能を提供します。

関連する API 操作メソッドを要約します:

3. Python をデータベースに接続する一般的なプログラム プロセスを次のように要約します:

ステップ 1: 関連するモジュールをインポートします

そのうち、MYSQL:

import MySQLdb

そのうち、MSSQL :

import pymssql

ステップ 2: 接続を開きます

MYSQL:

conn = MySQLdb.connect(self.dbhost,self.dbuser,self.dbpasswd,self.database)

MSSQL:

conn = pymssql.connect(host=self.dbhost,user=self.dbuser,password=self.dbpasswd,database=self.database)

[このメソッドは独自の関数プロトタイプを通じて定義されています]

ステップ 3: 接続が完了したら、カーソルの作成を開始します。このオブジェクトを使用して、データベースにリクエスト操作を送信します。

コード:

curs = conn.cursor()

JAVAのStatementオブジェクトに相当します。ステートメントを通じて SQL コマンドを送信します

ステップ 4: SQL コマンドのデータベース サーバーへの送信を開始します。次のように実行できます

curs.execute(SQL)

例:

curs.execute("select * from test")

SQL コマンドには、任意の SQL ステートメントを使用するか、INSERT 操作または DELETE を実行します。操作は SELECT 操作にすることもできます。実行後に commit() が必要になることに注意してください。

例:

cursor.execute("insert into test(id) values(1)")

SELECT 操作が実行される場合、5 番目のステップが必要です:

ステップ 5:

curs.execute("select * from test")
rows = curs.fetchall()

fetchall() はカーソル オブジェクトの単なるメソッドです。

これで、関連情報を抽出できます

for i in range(len(rows)):
 print "Row",i,"name",rows[i][0],"value",rows[i][1]

私が書いたコードを見てください:

def test(self):
    conn = self.connect()
    sql="select * from bbs where id<20"
    curs = conn.cursor()  #得到一个游标对象
    curs.execute(sql)    #执行一个SQL语句
    rows=curs.fetchall()  #得到全部的查询结果集
    for i in range(len(rows)): #
      print "Row",i,"name",rows[i][3],"value",rows[i][4]
    conn.close()

理解しました: このメソッドを通じて取得されたレコードの行は、実際にはタプル データ構造です。

それらの 1 つを取得するには、2 次元配列と同様のメソッドを使用してクエリを実行できます。

rows[1][0]: 最初のレコードの最初の位置の値を表します。

それでは、データベースから抽出してエンコードおよびデコードする方法を見てみましょう

for i in range(len(rows)):
      print rows[i][4].decode(&#39;gb2312&#39;, &#39;ignore&#39;).encode(&#39;gb2312&#39;)

以上がPython を使用して SQLServer2000 に接続する方法の詳細な例の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。