1、中文亂碼問題:
(1)、文件頭加上# -*- coding:utf-8 -*- 或者 #coding=utf8
(2)、pymssql.connect連接串中charset是要跟你數據庫的編碼一樣,如果是數據庫是gb2312 ,則寫charset='gb2312'。
(3)、讀取數據時需要decode('utf-8'),寫入數據時需要encode('utf-8'),這樣就可以避免中文亂碼或報錯問題。
2、需要安裝pymssql包(連接mysql安裝pymysql)
pip install pymssql
3、代碼:
# -*- coding:utf-8 -*- import pymssql class MSSQL: def __init__(self,host,user,pwd,db): self.host = host self.user = user self.pwd = pwd self.db = db def __GetConnect(self): if not self.db: raise(NameError,"沒有設置數據庫信息") self.conn = pymssql.connect(host=self.host,user=self.user,password=self.pwd,database=self.db,charset="utf8") cur = self.conn.cursor() if not cur: raise(NameError,"連接數據庫失敗") else: return cur def Selsql(self,sql): cur = self.__GetConnect() cur.execute(sql) resList = cur.fetchall() #查詢完畢后必須關閉連接 self.conn.close() return resList def Exesql(self,sql): cur = self.__GetConnect() try: # 執行sql語句 cur.execute(sql) # 提交到數據庫 self.conn.commit() except: # 發生錯誤時回滾 conn.rollback() # 關閉數據庫連接 self.conn.close() ms = MSSQL(host="192.168.1.1",user="sa",pwd="sa",db="testdb") reslist = ms.Selsql("select * from webuser") for i in reslist: print i newsql="update webuser set name='%s' where id=1"%u'測試' print newsql ms.Exesql(newsql.encode('utf-8'))
4、數據庫操作常用函數:
commit() 提交
rollback() 回滾
cursor用來執行命令的方法:
callproc(self, procname, args):用來執行存儲過程,接收的參數為存儲過程名和參數列表,返回值為受影響的行數
execute(self, query, args):執行單條sql語句,接收的參數為sql語句本身和使用的參數列表,返回值為受影響的行數
executemany(self, query, args):執行單挑sql語句,但是重復執行參數列表里的參數,返回值為受影響的行數
nextset(self):移動到下一個結果集
cursor用來接收返回值的方法:
fetchall(self):接收全部的返回結果行.
fetchmany(self, size=None):接收size條返回結果行.如果size的值大於返回的結果行的數量,則會返回cursor.arraysize條數據.
fetchone(self):返回一條結果行.
scroll(self, value, mode='relative'):移動指針到某一行.如果mode='relative',則表示從當前所在行移動value條,如果 mode='absolute',則表示從結果集的第一行移動value條.
更新操作語句中列表的運用:
value=[1,'aaa']
cur.execute('insert into test values(%s,%s)',value)
values=[]
for i in range(20):
values.append((i,'aaa'+str(i)))
cur.executemany('insert into test values(%s,%s)',values)
