Pythonの研究ノート-Python - SQLサーバーの構文

 

ストアドプロシージャを呼び出す方法

戻り値の型

表に戻ります:

--示例表
create table Salary(
	Sno 	varchar(20) 	NOT NULL REFERENCES Staff(Sno)ON DELETE CASCADE,	--职工号
	Base	decimal(20,2)	not null ,			--基础薪资
	Bonus	decimal(20,2)	not null ,							--津贴奖金
	Stock	decimal(20,2)	not null ,						--股份分红
	constraint cons_Base	check(Base >=2000 and Base <=50000),
	constraint cons_Bonus	check(Bonus<=20000 and Bonus>=0),
	constraint cons_Stock	check(Stock<=100000 and Stock>=0)
	);
--返回结果集table的proc
create proc test_proc_select
as	
	select * from Salary
import pymssql
conn = pymssql.connect(host='127.0.0.1',user='sa',
                       password='xxxxxxxxxx',database='Bank',charset='GBK')
cursor = conn.cursor()
cursor.execute('exec test_proc_select')
result = cursor.fetchall()  #得到结果集
for item in result:
    print(item)  #遍历打印查询结果集的数据

( '642825'、DECIMAL( '15000.00')、小数点( '5000.00')、DECIMAL( '5000.00'))
'666666'、進数( '7000.00')、小数点( '2000.00')、小数点( '1500.00' ))

戻るリターン「int型/文字列」:

私は解決する方法を知りませんでした!仲間の答えを願っています!

中国を読んでゴミ問題を解決する方法

「GBK」に設定CHARSET;ない「UTF8」、SQLサーバのデフォルトの形式はGBKであるため、

import pymssql
conn = pymssql.connect(host='127.0.0.1',user='sa',
                       password='xxxxxxxxxxx',database='Bank',charset='GBK')

接続オブジェクト

Connectionオブジェクトは以下のメソッドに応答する必要があります。

接続方法

。閉じる()

閉じる接続オブジェクト

.commit()

データベースに対する保留中のトランザクションをコミットします。

すべてのトランザクションを実行することは遅れています

SQL文の下で実行されるのを待っているConnectionオブジェクト

sql='''insert into test1 
       values(1)'''
cursor.execute(sql)
# 提交到数据库执行;没有此句,插入语句将不会执行
conn.commit()

SQL文がconnection.commitに行く前に、実行後に実行されていません(後)

.rollback()

ロールバック以前に行わ引き起こさデータベースへの変更を取り消します

変更をコミットせずに接続を閉じると、最初の暗黙的なロールバックが行われることになります。

.CURSOR()

カーソル変数の戻り

from pymssql import connect
server='127.0.0.1'
user='sa'
password='xx94524253xx'
database='users'
conn=connect(host='%s'%(server),user='%s'%(user),password='%s'%(password),database='%s'%(database),charset='GBK')
cursor = conn.cursor()
sql='''insert into test1 
       values(1)'''
cursor.execute(sql)
try:
   cursor.execute(sql)
   # 提交到数据库执行;没有此句,插入语句将不会执行
   conn.commit()
   cursor.close()
except:
   conn.rollback()
conn.close()

カーソルオブジェクト

カーソルオブジェクト。その接続オブジェクトが互いに相互接続、複数のカーソルを作成しているが、カーソルの変化によって引き起こされる他のカーソルに反映されます、

カーソルの属性

.DESCRIPTION

7が含まれています

  • name属性名
  • コーディングTYPE_CODEタイプ 
  • ディスプレイサイズ
  • internal_size
  • 精度
  • 規模
  • null_ok

名前およびTYPE_CODEに関係なく値が取られるべきかどうかの、必須であり、空の場合は他のものは、オプションで、対応する値は空です。

カーソル操作が結果セットの戻り結果セットを返さない、.DESCRIPTION戻りなし

cursor.execute('exec test_proc_select @int=1')
result = cursor.fetchall()  #得到结果集
print('description:')
print(cursor.description)
print('fetch_result:'+str(result))
description:
(('Sno', 1, None, None, None, None, None), ('Base', 5, None, None, None, None, None), ('Bonus', 5, None, None, None, None, None), ('Stock', 5, None, None, None, None, None))
fetch_result:[('642825', Decimal('15000.00'), Decimal('5000.00'), Decimal('5000.00')), ('666666', Decimal('7000.00'), Decimal('2000.00'), Decimal('1500.00'))]

.rowcount

反応の最後の行が(実行)の影響初期値0

sql='insert into test1 values(%d)'
cursor.executemany(sql,(11,12,13))
conn.commit()
print(str(cursor.rowcount))  # 3

カーソル方法

.callproc(  PROCNAME  [  パラメータ  ])

2つのアプローチが可能ではありません!

cursor.callproc('test_proc_select',(1))

cursor.callproc('test_proc_select',1)

.close()

カーソルをクローズします

.execute運転  [  パラメータ ])

適切なSQL文を実行します

.executemany(  SQLの文で、要素のシーケンスパラメータセット

異なるパラメータで同じ形式の文を実行しながら、

sql='insert into test1 values(%d)'
cursor.executemany(sql,(11,12,13))
conn.commit()

.fetchone()

import pymssql
conn = pymssql.connect(host='127.0.0.1',user='sa',
                       password=pwd,database='Bank',charset='GBK')
cursor = conn.cursor()
cursor.execute('exec test_proc_select')
result = cursor.fetchone()  #得到结果集
print('fetch_result:'+str(result))
count = 0
for item in result:
    print('item_'+str(count)+':'+str(item))  #遍历打印查询结果集的数据
    count = count+1

PS:それは別個の非印刷の印刷STR変数である場合、印刷PYにここ小さな追加のルール、コンパイルすることができ、変数および非STR STR変数が含まれているプリントに付与されている場合。たとえば、次のように:

test1=1
test2=2
print(test1+test2)#可以通过


test1=1
test2='2'
print(test1+test2)#不可以通过

.fetchone()は、結果セットの2つだけの要素と呼ばれる3回(.fetchone場合、バック結果セットの各実行の要素をとることができる)、Noneに最後の結果

print(str(cursor.fetchone()))
print(str(cursor.fetchone()))
print(str(cursor.fetchone()))

.fetchmany([ サイズ= cursor.arraysize ])

#当list总共只有两个元素时只要size>=2,无论为多少
rs = cursor.fetchmany(size=2)
print(rs)

rs = cursor.fetchmany(size=3)
print(rs)

#输出结果一样

.fetchall()

結果セットのすべての要素を抽出し、コレクションの末尾に移動

rs = cursor.fetchall() # 提取所有结果集赋值给rs变量,并使cursor直接调至集尾

相当の.fetchmany(szie = MAX_SIZE)

もし.fetchone後の最初の.fetchall()、()なしの値

print(str(cursor.fetchall()))
print(str(cursor.fetchone()))

.nextset()

このメソッドは、現在のセットから任意の残りの行を破棄し、次の使用可能なセットにカーソルがスキップを行います。

この方法は、(現在のすべての残りの要素をスキップする対応...いずれかのリスト、タプル)現在の結果セット単位をスキップ

結果は、好ましくは、第一要素、第二fetchone(いずれか)又はなしの下で、第2の要素、第fetchone(いずれか)の下で設定された場合

print(str(cursor.fetchone()))
cursor.nextset()
print(str(cursor.fetchone()))

 

.arraysize

この読み取り/書き込み属性は、と一度にフェッチする行数を指定します  )(.fetchmanyこの時点で、単一の行をフェッチするために意味デフォルトは1。

実装は、に対してこの値を遵守しなければならない  .fetchmany()  メソッドが、一度にデータベースの単一列と相互作用して自由です。またの実装で使用されてもよい  .executemany()

あなたは渡すことはできません!

result = cursor.fetchmany(size=cursor.arraysize) 

 

公開された19元の記事 ウォンの賞賛0 ビュー800

おすすめ

転載: blog.csdn.net/weixin_44151772/article/details/104088830