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