使用Python操作SQL Server數(shù)據(jù)庫
如果有條件可以使用遠程連接或者TeamViewer等工具,操作帶GUI的數(shù)據(jù)庫管理器,實施起來可以很省心。可以直接查看結果,模板化查詢甚至提示語句錯誤等。
如果是使用linux本地或者ssh訪問SQL?Server數(shù)據(jù)庫的,稍微麻煩點??梢允褂胹qlcmd作為替代工具。后面會介紹。
沒有mysql一樣的show database;命令,所以顯示所有的數(shù)據(jù)庫都比較麻煩??梢允褂眠@條命令:select name from sysobjects where xtype='u'
SQL Server中各個系統(tǒng)表的作用
sysaltfiles????僅在主數(shù)據(jù)庫 保存數(shù)據(jù)庫的文件
syscharsets????僅在主數(shù)據(jù)庫 字符集與排序順序
sysconfigures??僅在主數(shù)據(jù)庫 配置選項
syscurconfigs??僅在主數(shù)據(jù)庫 當前配置選項
sysdatabases???僅在主數(shù)據(jù)庫 服務器中的數(shù)據(jù)庫
syslanguages???僅在主數(shù)據(jù)庫 語言
syslogins??????僅在主數(shù)據(jù)庫 登陸帳號信息
sysoledbusers??僅在主數(shù)據(jù)庫 鏈接服務器登陸信息
sysprocesses???僅在主數(shù)據(jù)庫 進程
sysremotelogins?僅在主數(shù)據(jù)庫 遠程登錄帳號
syscolumns?????每個數(shù)據(jù)庫 列
sysconstrains??每個數(shù)據(jù)庫 限制
sysfilegroups??每個數(shù)據(jù)庫 文件組
sysfiles???????每個數(shù)據(jù)庫 文件
sysforeignkeys?每個數(shù)據(jù)庫 外部關鍵字
sysindexs??????每個數(shù)據(jù)庫 索引
sysmenbers?????每個數(shù)據(jù)庫 角色成員
sysobjects?????每個數(shù)據(jù)庫 所有數(shù)據(jù)庫對象
syspermissions?每個數(shù)據(jù)庫 權限
systypes??????每個數(shù)據(jù)庫 用戶定義數(shù)據(jù)類型
sql cmd(sqlserver客戶端也可以)
直接訪問數(shù)據(jù)庫:
sqlcmd -S SERVERNAME -U USERNAME -P PASSWORD -d DB
示例sqlcmd -S "127.0.0.1" -U "sa" -P "12345678"
遇到查詢操作時提示“對象名無效”的情況:
可能因為沒有選擇數(shù)據(jù)庫,或者數(shù)據(jù)庫里沒有該表。一定要跟上參數(shù)-d。進入執(zhí)行模式之后可以輸入自己的SQL語句??梢赃B續(xù)多條,命令最后以GO語句結尾,是SQL Server的語法。若要提高性能,請在一個 sqlcmd 會話中執(zhí)行盡可能多的操作,而不是在一系列會話中來執(zhí)行這些操作。
輸入/輸出選項-f codepage | i:codepage[,o:codepage] | o:codepage[,i:codepage],用于指定輸入和輸出代碼頁。代碼頁頁碼是指定已安裝的 Windows 代碼頁的數(shù)值。
代碼頁轉(zhuǎn)換規(guī)則:
如果未指定代碼頁, sqlcmd 會將當前代碼頁同時用于輸入文件和輸出文件,除非輸入文件為 Unicode 文件,在此情況下無需進行轉(zhuǎn)換。
sqlcmd 自動識別 Big-endian Unicode 和 Little-endian Unicode 輸入文件。 如果已指定 -u 選項,輸出將始終為 Little-endian Unicode。
如果未指定輸出文件,輸出代碼頁將為控制臺代碼頁。借助此方法,可以在控制臺上正確顯示輸出。假定多個輸入文件具有相同的代碼頁??梢詫?Unicode 和非 Unicode 輸入文件混合在一起。在命令提示符處輸入 chcp 以驗證 Cmd.exe 的代碼頁。
-i input_file[,輸入_file2...]
標識包含一批 SQL 語句或存儲過程的文件??梢灾付ㄒ错樞蜃x取和處理的多個文件。文件名之間不要使用任何空格。sqlcmd 將首先檢查所有指定的文件是否都存在。如果有一個或多個文件不存在, sqlcmd 將退出。-i 和 -Q/-q 選項是互斥的。
-i C:\<filename>
-i \\<Server>\<Share$>\<filename>
-i "C:\Some Folder\<file name>"
清空表
刪除表:
delete from?表名
清除表中的所有數(shù)據(jù)、保留表結構( 清除表中所有行,保留表結構、與delete類似):
truncate table?表名
比delete速度快,效率高,使用的系統(tǒng)和事務日志資源少。
刪除表(所有數(shù)據(jù)及表結構):
drop table?表名
pymssql庫
如果使用pymssql庫操作SqlServer連接,基本上就是一把梭。
基本的建立連接:
HOST = '127.0.0.1'
USER = 'USERNAME'
PW = 'PASSWORD'
DB = 'DBNAME'
conn = pymssql.connect(host=HOST, user=USER, password=PW, database=DB)
cursor = conn.cursor()
執(zhí)行SQL語句(查詢):
cursor.execute('SELECT * FROM mytable')
row = cursor.fetchone()
while row:
row = cursor.fetchone()
conn.close()
在操作執(zhí)行SQL語句的函數(shù).execute()的時候,傳入語句不能臨時進行拼接,必須是常量或者格式化的變量??赡苁强紤]注入等問題,故意設定的。
執(zhí)行SQL語句(其他):
cursor.execute("INSERT INTO position VALUES (%s, %s)", (num, address))
conn.commit()
除了查詢語句比較特殊,其他的語句一般都需要額外的使用.commit()進行數(shù)據(jù)提交。如果不提交,可以即便語句執(zhí)行了,也沒有結果返回。此外,連接一開始設定了自動提交屬性,可以忽略這條。
版權聲明:轉(zhuǎn)載文章來自公開網(wǎng)絡,版權歸作者本人所有,推送文章除非無法確認,我們都會注明作者和來源。如果出處有誤或侵犯到原作者權益,請與我們聯(lián)系刪除或授權事宜。