python fetchone 返回的是什麼類型

1 你是根據資料庫來進行語句分割,評價分析的嗎。
如果是的話,那就把分析結果存到字典里就可以了。(也就是你說的保存)
使用呢,就是對這個字典進行判斷處理。
2 如果不是的話,你是想收集語料庫放到字典里,然後再利用這個字典對象去判斷?
保存大詞典對象的話可以用gdbm來讀寫。

Ⅱ Python 中用 Tkinter GUI編程

可以使用sqlite,下面是使用方法。

  1. 導入PythonSQLITE資料庫模塊

Python2.5之後,內置了SQLite3,成為了內置模塊,這給我們省了安裝的功夫,只需導入即可~

importsqlite3


2.創建/打開資料庫


在調用connect函數的時候,指定庫名稱,如果指定的資料庫存在就直接打開這個資料庫,如果不存在就新創建一個再打開。


cx=sqlite3.connect("E:/test.db")

也可以創建資料庫在內存中。

con=sqlite3.connect(":memory:")

3.資料庫連接對象


打開資料庫時返回的對象cx就是一個資料庫連接對象,它可以有以下操作:


commit()--事務提交


rollback()--事務回滾

close()--關閉一個資料庫連接

cursor()--創建一個游標


關於commit(),如果isolation_level隔離級別默認,那麼每次對資料庫的操作,都需要使用該命令,你也可以設置isolation_level=None,這樣就變為自動提交模式。

4.使用游標查詢資料庫


我們需要使用游標對象SQL語句查詢資料庫,獲得查詢對象。通過以下方法來定義一個游標。


cu=cx.cursor()

游標對象有以下的操作:

execute()--執行sql語句

executemany--執行多條sql語句

close()--關閉游標

fetchone()--從結果中取一條記錄,並將游標指向下一條記錄

fetchmany()--從結果中取多條記錄

fetchall()--從結果中取出所有記錄

scroll()--游標滾動


1.建表

cu.execute("createtablecatalog(idintegerprimarykey,pidinteger,namevarchar(10)UNIQUE,nicknametextNULL)")


上面語句創建了一個叫catalog的表,它有一個主鍵id,一個pid,和一個name,name是不可以重復的,以及一個nickname默認為NULL。


2.插入數據


請注意避免以下寫法:


#Neverdothis--insecure會導致注入攻擊


pid=200

c.execute("...wherepid='%s'"%pid)

正確的做法如下,如果t只是單個數值,也要採用t=(n,)的形式,因為元組是不可變的。

fortin[(0,10,'abc','Yu'),(1,20,'cba','Xu')]:

cx.execute("insertintocatalogvalues(?,?,?,?)",t)

簡單的插入兩行數據,不過需要提醒的是,只有提交了之後,才能生效.我們使用資料庫連接對象cx來進行提交commit和回滾rollback操作.

cx.commit()


3.查詢

cu.execute("select*fromcatalog")


要提取查詢到的數據,使用游標的fetch函數,如:


In[10]:cu.fetchall()

Out[10]:[(0,10,u'abc',u'Yu'),(1,20,u'cba',u'Xu')]

如果我們使用cu.fetchone(),則首先返回列表中的第一項,再次使用,則返回第二項,依次下去.


4.修改

In[12]:cu.execute("updatecatalogsetname='Boy'whereid=0")

In[13]:cx.commit()

注意,修改數據以後提交


5.刪除


cu.execute("deletefromcatalogwhereid=1")

cx.commit()


6.使用中文

請先確定你的IDE或者系統默認編碼是utf-8,並且在中文前加上u


x=u'魚'

cu.execute("updatecatalogsetname=?whereid=0",x)

cu.execute("select*fromcatalog")

cu.fetchall()

[(0,10,u'u9c7c',u'Yu'),(1,20,u'cba',u'Xu')]

如果要顯示出中文字體,那需要依次列印出每個字元串


In[26]:foritemincu.fetchall():

....:forelementinitem:

....:printelement,

....:print

....:

010魚Yu

120cbaXu


7.Row類型

Row提供了基於索引和基於名字大小寫敏感的方式來訪問列而幾乎沒有內存開銷。原文如下:

sqlite3.Rowprovidesbothindex-basedandcase-insensitivename-.-basedapproachorevenadb_rowbasedsolution.

Row對象的詳細介紹


classsqlite3.Row

_factoryforConnectionobjects..


,iteration,representation,equalitytestingandlen().


,theycompareequal.


Changedinversion2.6:Addediterationandequality(hashability).


keys()

.Immediatelyafteraquery,.description.


Newinversion2.6.


下面舉例說明


In[30]:cx.row_factory=sqlite3.Row


In[31]:c=cx.cursor()


In[32]:c.execute('select*fromcatalog')

Out[32]:<sqlite3.Cursorobjectat0x05666680>


In[33]:r=c.fetchone()


In[34]:type(r)

Out[34]:<type'sqlite3.Row'>


In[35]:r

Out[35]:<sqlite3.Rowobjectat0x05348980>


In[36]:printr

(0,10,u'u9c7c',u'Yu')


In[37]:len(r)

Out[37]:4


In[39]:r[2]#使用索引查詢

Out[39]:u'u9c7c'


In[41]:r.keys()

Out[41]:['id','pid','name','nickname']


In[42]:foreinr:

....:printe,

....:

010魚Yu


使用列的關鍵詞查詢

In[43]:r['id']

Out[43]:0


In[44]:r['name']

Out[44]:u'u9c7c'

Ⅲ python怎麼把查詢結果輸出出來

試試這個fetchone函數
conn=MySQLdb.connect(host='localhost',user='root',passwd='root',db='test',port=3306)
cur=conn.cursor()
cur.execute('select * from user')
data = cur.fetchone()
print "Database : %s " % data
conn.commit()
cur.close()
conn.close()

Ⅳ python fetchone 取出的數據是什麼類型

請問如何來暫時保存這些數據?如何使用這些數據?
不太確定理解了你的問題:
1 你是根據資料庫來進行語句分割,評價分析的嗎。
如果是的話,那就把分析結果存到字典里就可以了。(也就是你說的保存)
使用呢,就是對這個字典進行判斷處理。
2 如果不是的話,你是想收集語料庫放到字典里,然後再利用這個字典對象去判斷?
保存大詞典對象的話可以用gdbm來讀寫。

Ⅳ 如何使用python連接資料庫,插入並查詢數據

你可以訪問Python資料庫介面及API查看詳細的支持資料庫列表。不同的資料庫你需要下載不同的DB API模塊,例如你需要訪問Oracle資料庫和Mysql數據,你需要下載Oracle和MySQL資料庫模塊。
DB-API 是一個規范. 它定義了一系列必須的對象和資料庫存取方式, 以便為各種各樣的底層資料庫系統和多種多樣的資料庫介面程序提供一致的訪問介面 。
Python的DB-API,為大多數的資料庫實現了介面,使用它連接各資料庫後,就可以用相同的方式操作各資料庫。
Python DB-API使用流程:

引入 API 模塊。
獲取與資料庫的連接。
執行SQL語句和存儲過程。
關閉資料庫連接。

什麼是MySQLdb?

MySQLdb 是用於Python鏈接Mysql資料庫的介面,它實現了 Python 資料庫 API 規范 V2.0,基於 MySQL C API 上建立的。

如何安裝MySQLdb?

為了用DB-API編寫MySQL腳本,必須確保已經安裝了MySQL。復制以下代碼,並執行:
#!/usr/bin/python
# -*- coding: UTF-8 -*-

import MySQLdb

如果執行後的輸出結果如下所示,意味著你沒有安裝 MySQLdb 模塊:
Traceback (most recent call last):
File "test.py", line 3, in <mole>
import MySQLdb
ImportError: No mole named MySQLdb

安裝MySQLdb,請訪問 ,(Linux平台可以訪問:)從這里可選擇適合您的平台的安裝包,分為預編譯的二進制文件和源代碼安裝包。
如果您選擇二進制文件發行版本的話,安裝過程基本安裝提示即可完成。如果從源代碼進行安裝的話,則需要切換到MySQLdb發行版本的頂級目錄,並鍵入下列命令:
$ gunzip MySQL-python-1.2.2.tar.gz
$ tar -xvf MySQL-python-1.2.2.tar
$ cd MySQL-python-1.2.2
$ python setup.py build
$ python setup.py install

注意:請確保您有root許可權來安裝上述模塊。

資料庫連接

連接資料庫前,請先確認以下事項:

您已經創建了資料庫 TESTDB.
在TESTDB資料庫中您已經創建了表 EMPLOYEE
EMPLOYEE表欄位為 FIRST_NAME, LAST_NAME, AGE, SEX 和 INCOME。
連接資料庫TESTDB使用的用戶名為 "testuser" ,密碼為 "test123",你可以可以自己設定或者直接使用root用戶名及其密碼,Mysql資料庫用戶授權請使用Grant命令。
在你的機子上已經安裝了 Python MySQLdb 模塊。
如果您對sql語句不熟悉,可以訪問我們的 SQL基礎教程

實例:

以下實例鏈接Mysql的TESTDB資料庫:
#!/usr/bin/python
# -*- coding: UTF-8 -*-

import MySQLdb

# 打開資料庫連接
db = MySQLdb.connect("localhost","testuser","test123","TESTDB" )

# 使用cursor()方法獲取操作游標
cursor = db.cursor()

# 使用execute方法執行SQL語句
cursor.execute("SELECT VERSION()")

# 使用 fetchone() 方法獲取一條資料庫。
data = cursor.fetchone()

print "Database version : %s " % data

# 關閉資料庫連接
db.close()

執行以上腳本輸出結果如下:
Database version : 5.0.45

創建資料庫表

如果資料庫連接存在我們可以使用execute()方法來為資料庫創建表,如下所示創建表EMPLOYEE:
#!/usr/bin/python
# -*- coding: UTF-8 -*-

import MySQLdb

# 打開資料庫連接
db = MySQLdb.connect("localhost","testuser","test123","TESTDB" )

# 使用cursor()方法獲取操作游標
cursor = db.cursor()

# 如果數據表已經存在使用 execute() 方法刪除表。
cursor.execute("DROP TABLE IF EXISTS EMPLOYEE")

# 創建數據表SQL語句
sql = """CREATE TABLE EMPLOYEE (
FIRST_NAME CHAR(20) NOT NULL,
LAST_NAME CHAR(20),
AGE INT,
SEX CHAR(1),
INCOME FLOAT )"""

cursor.execute(sql)

# 關閉資料庫連接
db.close()

資料庫插入操作

以下實例使用執行 SQL INSERT 語句向表 EMPLOYEE 插入記錄:
#!/usr/bin/python
# -*- coding: UTF-8 -*-

import MySQLdb

# 打開資料庫連接
db = MySQLdb.connect("localhost","testuser","test123","TESTDB" )

# 使用cursor()方法獲取操作游標
cursor = db.cursor()

# SQL 插入語句
sql = """INSERT INTO EMPLOYEE(FIRST_NAME,
LAST_NAME, AGE, SEX, INCOME)
VALUES ('Mac', 'Mohan', 20, 'M', 2000)"""
try:
# 執行sql語句
cursor.execute(sql)
# 提交到資料庫執行
db.commit()
except:
# Rollback in case there is any error
db.rollback()

# 關閉資料庫連接
db.close()

以上例子也可以寫成如下形式:
#!/usr/bin/python
# -*- coding: UTF-8 -*-

import MySQLdb

# 打開資料庫連接
db = MySQLdb.connect("localhost","testuser","test123","TESTDB" )

# 使用cursor()方法獲取操作游標
cursor = db.cursor()

# SQL 插入語句
sql = "INSERT INTO EMPLOYEE(FIRST_NAME, \
LAST_NAME, AGE, SEX, INCOME) \
VALUES ('%s', '%s', '%d', '%c', '%d' )" % \
('Mac', 'Mohan', 20, 'M', 2000)
try:
# 執行sql語句
cursor.execute(sql)
# 提交到資料庫執行
db.commit()
except:
# 發生錯誤時回滾
db.rollback()

# 關閉資料庫連接
db.close()

實例:

以下代碼使用變數向SQL語句中傳遞參數:
..................................
user_id = "test123"
password = "password"

con.execute('insert into Login values("%s", "%s")' % \
(user_id, password))
..................................

資料庫查詢操作

Python查詢Mysql使用 fetchone() 方法獲取單條數據, 使用fetchall() 方法獲取多條數據。

fetchone(): 該方法獲取下一個查詢結果集。結果集是一個對象
fetchall():接收全部的返回結果行.
rowcount: 這是一個只讀屬性,並返回執行execute()方法後影響的行數。

實例:

查詢EMPLOYEE表中salary(工資)欄位大於1000的所有數據:
#!/usr/bin/python
# -*- coding: UTF-8 -*-

import MySQLdb

# 打開資料庫連接
db = MySQLdb.connect("localhost","testuser","test123","TESTDB" )

# 使用cursor()方法獲取操作游標
cursor = db.cursor()

# SQL 查詢語句
sql = "SELECT * FROM EMPLOYEE \
WHERE INCOME > '%d'" % (1000)
try:
# 執行SQL語句
cursor.execute(sql)
# 獲取所有記錄列表
results = cursor.fetchall()
for row in results:
fname = row[0]
lname = row[1]
age = row[2]
sex = row[3]
income = row[4]
# 列印結果
print "fname=%s,lname=%s,age=%d,sex=%s,income=%d" % \
(fname, lname, age, sex, income )
except:
print "Error: unable to fecth data"

# 關閉資料庫連接
db.close()

以上腳本執行結果如下:
fname=Mac, lname=Mohan, age=20, sex=M, income=2000

資料庫更新操作

更新操作用於更新數據表的的數據,以下實例將 TESTDB表中的 SEX 欄位全部修改為 'M',AGE 欄位遞增1:
#!/usr/bin/python
# -*- coding: UTF-8 -*-

import MySQLdb

# 打開資料庫連接
db = MySQLdb.connect("localhost","testuser","test123","TESTDB" )

# 使用cursor()方法獲取操作游標
cursor = db.cursor()

# SQL 更新語句
sql = "UPDATE EMPLOYEE SET AGE = AGE + 1
WHERE SEX = '%c'" % ('M')
try:
# 執行SQL語句
cursor.execute(sql)
# 提交到資料庫執行
db.commit()
except:
# 發生錯誤時回滾
db.rollback()

# 關閉資料庫連接
db.close()

刪除操作

刪除操作用於刪除數據表中的數據,以下實例演示了刪除數據表 EMPLOYEE 中 AGE 大於 20 的所有數據:
#!/usr/bin/python
# -*- coding: UTF-8 -*-

import MySQLdb

# 打開資料庫連接
db = MySQLdb.connect("localhost","testuser","test123","TESTDB" )

# 使用cursor()方法獲取操作游標
cursor = db.cursor()

# SQL 刪除語句
sql = "DELETE FROM EMPLOYEE WHERE AGE > '%d'" % (20)
try:
# 執行SQL語句
cursor.execute(sql)
# 提交修改
db.commit()
except:
# 發生錯誤時回滾
db.rollback()

# 關閉連接
db.close()

執行事務

事務機制可以確保數據一致性。

事務應該具有4個屬性:原子性、一致性、隔離性、持久性。這四個屬性通常稱為ACID特性。

原子性(atomicity)。一個事務是一個不可分割的工作單位,事務中包括的諸操作要麼都做,要麼都不做。
一致性(consistency)。事務必須是使資料庫從一個一致性狀態變到另一個一致性狀態。一致性與原子性是密切相關的。
隔離性(isolation)。一個事務的執行不能被其他事務干擾。即一個事務內部的操作及使用的數據對並發的其他事務是隔離的,並發執行的各個事務之間不能互相干擾。
持久性(rability)。持續性也稱永久性(permanence),指一個事務一旦提交,它對資料庫中數據的改變就應該是永久性的。接下來的其他操作或故障不應該對其有任何影響。

Python DB API 2.0 的事務提供了兩個方法 commit 或 rollback。

Ⅵ fetchone函數和fetchall函數返回值的區別

DLL文件(Dynamic Linkable Library 即動態鏈接庫文件),是一種不能單獨運行的文件,它允許程序共享執行特殊任務所必需的代碼和其他資源 比較大的應用程序都由很多模塊組成,這些模塊分別完成相對獨立的功能。
fetchone() 返回單個的元組,也就是一條記錄(row),如果沒有結果 則返回 None
註:在MySQL中是NULL,而在Python中則是None

fetchall() 返回多個元組,即返回多個記錄(rows),如果沒有結果 則返回 ()

Ⅶ python 怎麼調用odbc

入門
連接到資料庫
調用connect方法並傳入ODBC連接字元串,其會返回一個connect對象。通過connect對象,調用cursor()方法,可以獲取一個游標cursor。如下代碼示例:
import pyodbc
#連接示例: Windows系統, 非DSN方式, 使用微軟 SQL Server 資料庫驅動
cnxn =pyodbc.connect('DRIVER={SQL Server};SERVER=localhost;PORT=1433;DATABASE=testdb;UID=me;PWD=pass')
#連接示例: Linux系統, 非DSN方式, 使用FreeTDS驅動
cnxn =pyodbc.connect('DRIVER={FreeTDS};SERVER=localhost;PORT=1433;DATABASE=testdb;UID=me;PWD=pass;TDS_Version=7.0')
#連接示例:使用DSN方式
cnxn = pyodbc.connect('DSN=test;PWD=password')
# 打開游標
cursor =cnxn.cursor()
以上示例只是標准示例,具體的ODBC連接字元串以你自己使用的驅動為准。
查詢一些數據
所有SQL語句都使用Cursor.execute()方法執行。比如select語句會返回一些結果行,你可以使用游標(Cursor)相關的函數功能(fetchone,fetchall,fetchmany)對結果進行檢索。
Cursor.fetchone 用於返回一個單行( Row)對象:
cursor.execute("selectuser_id, user_name from users")
row =cursor.fetchone()
if row:
print(row)
Row 對象是類似一個python元組(tuples),不過也可以通過列名稱來訪問,例如:
cursor.execute("selectuser_id, user_name from users")
row =cursor.fetchone()
print('name:',row[1]) # 使用列索引號來訪問數據
print('name:',row.user_name) # 或者直接使用列名來訪問數據
當所有行都已被檢索,則fetchone返回None.
while 1:
row = cursor.fetchone()
if not row:
break
print('id:', row.user_id)
Cursor.fetchall方法返回所有剩餘行並存儲於一個列表中。如果沒有行,則返回一個空列表。(注意:如果有很多行,會造成大量內存佔用。Fetchall會一次性將所有數據查詢到本地,然後再遍歷)
cursor.execute("selectuser_id, user_name from users")
rows = cursor.fetchall()
for row in rows:
print(row.user_id, row.user_name)
如果並不在意數據處理時間,可以使用游標本身作為一個迭代器,逐行迭代。這樣可以節省大量的內存開銷,但是由於和數據來回進行通信,速度會相對較慢:
cursor.execute("selectuser_id, user_name from users"):
for row in cursor:
print(row.user_id, row.user_name)
由於Cursor.execute總是返回遊標(cursor), 所以也可以簡寫成:
for row incursor.execute("select user_id, user_name from users"):
print(row.user_id, row.user_name)
我們可以在execut中使用」」」三重引號,來應用多行SQL字元串。這樣sql的可讀性大大增強。這是python特有的特性:
cursor.execute(
"""
select user_id, user_name
from users
where last_logon < '2001-01-01'
and bill_overe = 1
""")
SQL參數
ODBC支持使用問號作為SQL的查詢參數佔位符。可以在execute方法的SQL參數之後,提供SQL參數佔位符的值:
cursor.execute(
"""
select user_id, user_name
from users
where last_logon < ?
and bill_overe = ?
""", '2001-01-01', 1)
這樣做可以防止SQL注入攻擊,提高安全性。如果使用不同的參數反復執行相同的SQL它效率會更高,這種情況下該SQL將只預裝(prepared )一次。(pyodbc只保留最後一條編寫的語句,所以如果程序在語句之間進行切換,每次都會預裝,造成多次預裝。)
Python的DB API指定參數應以序列(sequence)對象傳遞,所以pyodbc也支持這種方式:
cursor.execute(
"""
select user_id, user_name
from users
where last_logon < ?
and bill_overe = ?
""", ['2001-01-01', 1])
插入數據
插入數據使用相同的函數 - 通過傳入insert SQL和相關佔位參數執行插入數據:
cursor.execute("insertinto procts(id, name) values ('pyodbc', 'awesome library')")
cnxn.commit()
cursor.execute("insertinto procts(id, name) values (?, ?)", 'pyodbc', 'awesome library')
cnxn.commit()
注意:調用cnxn.commit()。發成錯誤可以回滾。具體需要看資料庫特性支持情況。如果數據發生改變,最好進行commit。如果不提交,則在連接中斷時,所有數據會發生回滾。
更新和刪除數據
更新和刪除工作以同樣的方式:通過特定的SQL來執行。通常我們都想知道更新和刪除的時候有多少條記錄受到影響,可以使用Cursor.rowcount來獲取值:
cursor.execute("deletefrom procts where id <> ?", 'pyodbc')
print('Deleted {}inferior procts'.format(cursor.rowcount))
cnxn.commit()
由於execute 總是返回遊標(允許你調用鏈或迭代器使用),有時我們直接這樣簡寫:
deleted =cursor.execute("delete from procts where id <> 'pyodbc'").rowcount
cnxn.commit()
注意一定要調用commit。否則連接中斷時會造成改動回滾。
技巧和竅門
引號
於單引號SQL是有效的,當值需要使用單引號時,使用用雙引號包圍的SQL:
cursor.execute("deletefrom procts where id <> 'pyodbc'")
如果使用三重引號, 我們可以這樣使用單引號:
cursor.execute(
"""
delete
from procts
where id <> 'pyodbc'
""")
列名稱
Microsoft SQLServer之類的一些資料庫不會產生計算列的列名,在這種情況下,需要通過索引來訪問列。我們也可以使用sql列別名的方式,為計算列指定引用名稱:
row =cursor.execute("select count(*) as user_count fromusers").fetchone()
print('{}users'.format(row.user_count)
當然也可以直接使用列索引來訪問列值:
count =cursor.execute("select count(*) from users").fetchone()[0]
print('{}users'.format(count)
注意,上例的首列不能是Null。否則fetchone方法將返回None並且會報NoneType不支持索引的錯誤。如果有一個默認值,經常可以是ISNULL或合並:
maxid =cursor.execute("select coalesce(max(id), 0) fromusers").fetchone()[0]
自動清理
連接(默認)在一個事務中。如果一個連接關閉前沒有提交,則會進行當前事務回滾。很少需要finally或except 語句來執行人為的清理操作,程序會自動清理。
例如,如果下列執行過程中任何一條SQL語句出現異常,都將引發導致這兩個游標執行失效。從而保證原子性,要麼所有數據都插入發生,要麼所有數據都不插入。不需要人為編寫清理代碼。
cnxn =pyodbc.connect(...)
cursor = cnxn.cursor()
cursor.execute("insertinto t(col) values (1)")
cursor.execute("insertinto t(col) values (2)")
cnxn.commit()

Ⅷ python如何訪問資料庫

1.背景:

python提供了很多資料庫介面, 常用的資料庫有 MS SQL Server /mysql /oracle 等。

打開鏈接 https://wiki.python.org/moin/DatabaseInterfaces

是python 關於資料庫介面的一個總結 , 可以看到python支持的訪問的資料庫系統。

2.模塊:

python 主要是通過模塊和資料庫連接的。

2.1 安裝模塊:

如果使用anconda,本身就會集合很多模塊,不需要手動安裝。如果用pycharm就要手動安裝模塊。

安裝模塊流程:

下載模塊擴展包放到路徑下——>cmd找到相應路徑——> pip install +擴展包名字

下面列舉一些常用連接資料庫的模塊:pymssql / sqlite3/ PyMySQL/pyodbc/odbc/adodbapi

不同模塊連接的資料庫不同, 支持的版本系統有的也不一樣。但是大體用法都是相近的, 因為有DB-API

相關推薦:《Python教程》

3.Python DB-API

3.1背景:

在沒有DB-API 之前, 不同資料庫有不同的資料庫介面程序, 這就導致python 訪問 database 的介面程序非常混亂。如果我們學習了python 訪問 mysql 的介面程序, 然後要切換到另一個資料庫上, 我們還要在學習另外一個資料庫的介面程序。python DB-API就是為了解決介面程序混亂而生成的。有了DB-API, 在不同資料庫上移植代碼就變得簡單的多了。

3.2Python DB-API:

Python 定義了一套操作資料庫的 DB-API 介面,它是一個規范,定義了一系列必須的對象和資料庫存取方式,以便為不同的底層資料庫系統提供一致的訪問介面

這個鏈接就是python 官方給定的 DB-API 的說明 https://www.python.org/dev/peps/pep-0249/

3.3 Python DB--API的內容:

連接對象:

?Connect()創建連接:host/server /user/password/db connect方法生成一個connect對象, 我們通過這個對象來訪問資料庫。符合標準的模塊都會實現connect方法。

?close():關閉連接

?commit():提交當前事務。做出某些更改後確保已經進行了提交,這樣才可以將這些修改真正地保存到database中

?rollback() 回滾上一次調用 commit()以來對資料庫所做的更改

?cursor():創建游標。系統為用戶開通的一個數據緩沖區,用於存放SQL語句執行結果。cursor游標是有狀態的,它可以記錄當前已經取到結果的第幾個記錄了,因此,一般你只可以遍歷結果集一次。在上面的情況下,如果執行fetchone()會返回為空。這一點在測試時需要注意

游標對象:

?Execute()執行一個資料庫查詢或命令。 execute 執行sql 語句之後運行的結果不會直接output 出來 , 而是放到了一個緩存區, 要用 fetch語句+print 可以查詢sql運行的結果

?fetchone ()得到結果集的下一行

?fetchmany(size)得到結果集的下幾行

?fetchall()返回結果集中剩下的所有行

?rowcount 返回影響的行數

?Close()關閉游標對象

3.4Python DB--API的工作原理及流程:

如圖所示如果把python 和資料庫比作兩個不同的地點, connection 就是路, 能連接python和database。cursor就像在路上行駛的小貨車, 可以用於執行sql 語句, 以及存儲sql 運行的結果。

流程:

4.MS SQL Server 示例:

4.1 導入模塊、創建連接:

4.2 創建游標: 游標創建之後就可以對資料庫進行查詢更改了!

4.3對數據進行操作(創建表、插入行、更新數據、增加列、刪除行、列、表):

4.4 查詢 獲取行:

5.其他:

使用游標的時候要注意, 每次連接只能有一個游標查詢處於活躍狀態。 code演示:

execute()循環和 executemany() 插入100000 條數據測速: