ストアドプロシージャを呼び出す方法
戻り値の型
表に戻ります:
--示例表
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に行く前に、実行後に実行されていません(後)
ロールバック以前に行わ引き起こさデータベースへの変更を取り消します
変更をコミットせずに接続を閉じると、最初の暗黙的なロールバックが行われることになります。
.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()
カーソルオブジェクト
カーソルオブジェクト。その接続オブジェクトが互いに相互接続、複数のカーソルを作成しているが、カーソルの変化によって引き起こされる他のカーソルに反映されます、
カーソルの属性
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'))]
反応の最後の行が(実行)の影響初期値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()
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)
#输出结果一样
結果セットのすべての要素を抽出し、コレクションの末尾に移動
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()))
この読み取り/書き込み属性は、と一度にフェッチする行数を指定します )(.fetchmany。この時点で、単一の行をフェッチするために意味デフォルトは1。
実装は、に対してこの値を遵守しなければならない .fetchmany() メソッドが、一度にデータベースの単一列と相互作用して自由です。またの実装で使用されてもよい .executemany() 。
あなたは渡すことはできません!
result = cursor.fetchmany(size=cursor.arraysize)