sqlite以及python的應用

有點亂,本身平時,遇到了就記下來,因此沒整理。html

數據庫sqlite,以及Qt對數據庫的操做

sql學習網址:
sqlite官網: http://www.sqlite.org
MySQL下載、安裝、學習
SQl:結構化查詢語言
 結構化查詢語言(Structured Query Language)簡稱SQL(發音:/ˈɛs kjuː ˈɛl/ "S-Q-L"),結構化查詢語言是一種數據庫查詢和 程序設計語言,用於存取數據以及查詢、更新和管理 關係數據庫系統;同時也是 數據庫腳本文件的擴展名。結構化查詢語言是高級的非過程化編程語言,容許用戶在高層 數據結構上工做。它不要求用戶指定對數據的存放方法,也不須要用戶瞭解具體的數據存放方式,因此具備徹底不一樣底層結構的不一樣 數據庫系統可使用相同的結構化查詢語言做爲數據輸入與管理的接口。結構化查詢語言語句能夠嵌套,這使他具備極大的靈活性和強大的功能。 
 
 
結構化查詢語言包含 6 個部分
一: 數據查詢語言( DQL:Data Query Language):
其語句,也稱爲「數據檢索 語句」,用以從表中得到數據,肯定數據怎樣在應用程序給出。保留字SELECT是DQL(也是全部SQL)用得最多的動詞,其餘DQL經常使用的保留字有WHERE,ORDER BY,GROUP BY和HAⅥNG。這些DQL保留字常與其餘類型的SQL語句一塊兒使用。
二: 數據操做語言(DML:Data Manipulation Language):
其語句包括動詞 INSERTUPDATEDELETE。它們分別用於添加,修改和刪除表中的行。也稱爲動做查詢語言。
三:事務處理語言(TPL):
它的語句能確保被DML語句影響的表的全部行及時得以更新。TPL語句包括BEGIN TRANSACTION,COMMIT和ROLLBACK。
四: 數據控制語言(DCL):
它的語句經過GRANT或REVOKE得到許可,肯定單個用戶和用戶組對 數據庫對象的訪問。某些RDBMS可用GRANT或REVOKE控制對 表單個列的訪問。
五:數據定義語言(DDL):
其語句包括動詞CREATE和DROP。在數據庫中建立新表或刪除表(CREAT TABLE 或 DROP TABLE);爲表加入索引等。DDL包括許多與人 數據庫目錄中得到數據有關的保留字。它也是動做查詢的一部分。
六:指針控制語言(CCL):
它的語句,像DECLARE CURSOR,FETCH INTO和UPDATE WHERE CURRENT用於對一個或多個表單獨行的操做。
 
SQlite
 
查詢:
 
不須要服務器, 並且也不存在授 權問題. 它是Python 中其它的持久存儲解決方案的一個替代品, 一個擁有 SQL 訪問界面的優秀替 代品. 在標準庫中有這麼一個模塊, 就能方便用戶使用Python 和 SQLite 進行軟件開發, 等到軟
件產品正式上市發佈時, 只要須要, 就可以很容易的將產品使用的數據庫後端變動爲一個全功能的, 更強大的相似 MySQL, PostgreSQL, Oracle 或 SQL Server 那樣的數據庫. 固然, 對那些不須要那 麼大馬力的應用程序來講, SQLite 已經足夠使用.
在一個關係數據庫中,數據存儲在各個表中,表能夠當作二維數據結構。每一個列都應該具備相同到位數據結構。
Method Name Description
close() 關閉數據庫鏈接
commit() 提交當前事務
rollback() 取消當前事務
cursor() 使用這個鏈接建立並返回一個遊標或類遊標的對象
errorhandler (cxn, cur, errcls, errval)
 
 
 
關係數據庫中普遍使用ID號,由數據庫管理惟一號碼的分配,以即可以經過這些號碼對每行進行引用,以保證每行都是惟一的(即使是她們有相同的數據)。而後僅僅經過ID就徹底能夠引用每個成員。其實就是至關於表的主鍵。
 
1. 用db.connect建立數據庫鏈接,假設鏈接對象爲conn 2. 若是該數據庫操做不須要返回結果,就直接用conn.execute查詢,根據數據庫事務隔離級別的不一樣,可能修改數據庫須要conn.commit 3. 若是須要返回查詢結果則用conn.cursor建立遊標對象cur, 經過cur.execute查詢數據庫,用cur.fetchall/cur.fetchone/cur.fetchmany返回查詢結果。根據數據庫事 務隔離級別的不一樣,可能修改數據庫須要conn.commit 4. 關閉cur, conn
cx = sqlite3.connect("E:/test.db") 其實咱們不須要顯式的建立一個sqlite數據庫,在調用connect函數的時候,指定庫名稱,若是指定的數據庫存在就直接打開這個數據庫,若是不存在就新建立一個再打開。這一點應用很好理解。
 

cu = cx.cursor() 這樣定義了一個遊標。遊標對象有如下的操做:python

execute()--執行sql語句   executemany--執行多條sql語句   close()--關閉遊標   fetchone()--從結果中取一條記錄,並將遊標指向下一條記錄   fetchmany()--從結果中取多條記錄   fetchall()--從結果中取出全部記錄   scroll()--遊標滾動 下面就使用Python SQLITE數據庫中游標對咱們上面創建的數據庫做一些操做吧:
 
用遊標來查詢就能夠獲取到結果  
cur.execute("select * from t1")  
該語句很是重要,若沒有則不顯示信息。

3,查詢: cu.execute("select * from catalog") 要提取查詢到的數據,使用遊標的fetch***函數,如: print cu.fetchall() 返回結果以下: [(0, 0, u'name1'), (1, 0, u'hello')] 若是咱們使用cu.fetchone(),則首先返回列表中的第一項,再次使用,則返回第二項,依次下去.web

4,修改: cu.execute("update catalog set name='name2' where id = 0") sql

cx.commit() 注意,修改數據之後提交數據庫

5,刪除: cu.execute("delete from catalog where id = 1")  cx.commit() 以上簡單的操做反應的Python SQLITE數據庫操做的基本要點,這裏點到爲止.而後,SQLite的強大,並不只限於此,其對SQL高級特性的支持及其小巧靈活的特色,使得 SQLite在衆多領域受到開發者的青睞.編程

 

 
Orm框架:elixir
數據庫:sqlite
SqlAchemy:
 
學習網站:
Trac的安裝配置:
 
 
 
 
 
 
Qt對sqlite數據庫的操做:
 
 
 
QtSql模塊層次結構:
一、驅動層
二、SQL接口層:數據庫鏈接由QSqlDatabase提供,QsqlQuery提供了與數據庫的交互操做
三、用戶接口層:提供了從數據庫數據到用於數據表示的窗體的映射。
 
 
首先創建數據庫鏈接;
而後定義Qsqlquery類,進行數據庫的交互操做。
 
 
 
 
數據庫中,數據的排列方式是按照數據庫他認爲最爲高效的順序來存儲記錄的。咱們可讓數據以某種順序排列。只要在查詢時,加上ORDER BY
 
 
 
 
查詢數據庫的操做:
 
 
模型(model)表明數據集,負責數據的獲 取,查看及保存。儘管每種數據集的數據模型都不一樣,可是模型提供的API 對視圖都是一致
的。視圖(view)把獲得的數據呈現給用戶,若是數據量比較大時,用戶可以查看的只是全 部數據的一部分,即只是視圖請求查看得那部分。控制器在用戶和視圖之間進行協調,把用 戶的動做轉換爲對數據的查看或者編輯等操做,而後視圖在把數據的變化通知模型。
 
 
QsqlTableModel是一個高級接口,能夠不利用SQL原始語句,就能夠與數據庫交互,他能夠用做QTabelView和QTreeView的數據源。
 
QSqlrelationalTabelModel如上述所說,他須要與widget創建映射。
這個model是容許窗口部件和數據庫的某一類相對應。
該模型是QsqlTableModel的子類,提供了對外鍵的支持,外鍵是一張表的某個字段和另一張表的一一映射。
 
 
在model中插入數據,用setData函數,model.setData。
submitall函數,將記錄移植到不一樣的行位置。
 
SQL模型,須要調用submitall函數將更改寫入數據庫。
 
該用戶窗體是一次只顯示一次記錄。
QDateWidgetMapper將一個數據庫字段反映到所映射的窗口部件中,同時將窗口部件中的所做出的更改返回到數據庫中。咱們既能夠提交更改,也能夠自動提交由(QDataWidgetMapper:AutoSubmit)
 
 
DROP TABLE table name 刪除全部的數據
 
DROP TABLE 不能用於除去由 FOREIGN KEY 約束引用的表。必須先除去引用的 FOREIGN KEY 約束或引用的表。 
 
 
CREATE TABLE tablenames 就創建了表
 
Sqlite的存儲類型包括INTGER,TEXT,REAL
PyQT支持的SQL數據類型包括VARCHAR,NUMBER,DATE,DATETIME
 
 
 
在一個sqlite數據庫中,能夠創建多張表,而後將錶鏈接起來。
 
QTableView:
用於實現數據格式的數據顯示
 

一 添加表頭後端

    //準備數據模型     QStandardItemModel *student_model = new QStandardItemModel();     student_model->setHorizontalHeaderItem(0, new QStandardItem(QObject::tr("Name")));     student_model->setHorizontalHeaderItem(1, new QStandardItem(QObject::tr("NO.")));     student_model->setHorizontalHeaderItem(2, new QStandardItem(QObject::tr("Sex")));     student_model->setHorizontalHeaderItem(3, new QStandardItem(QObject::tr("Age")));     student_model->setHorizontalHeaderItem(4, new QStandardItem(QObject::tr("College")));     //利用setModel()方法將數據模型與QTableView綁定     ui->student_tableview->setModel(student_model);服務器

二 設置表格屬性數據結構

    //設置列寬不可變更,即不能經過鼠標拖動增長列寬            ui->student_tableview->horizontalHeader()->setResizeMode(0, QHeaderView::Fixed);        ui->student_tableview->horizontalHeader()->setResizeMode(1, QHeaderView::Fixed);        ui->student_tableview->horizontalHeader()->setResizeMode(2, QHeaderView::Fixed);        ui->student_tableview->horizontalHeader()->setResizeMode(3, QHeaderView::Fixed);        ui->student_tableview->horizontalHeader()->setResizeMode(4, QHeaderView::Fixed);   app

    //設置表格的各列的寬度值            ui->student_tableview->setColumnWidth(0,100);        ui->student_tableview->setColumnWidth(1,100);        ui->student_tableview->setColumnWidth(2,100);        ui->student_tableview->setColumnWidth(3,100);        ui->student_tableview->setColumnWidth(4,100);       

    //默認顯示行頭,若是你以爲不美觀的話,咱們能夠將隱藏            ui->student_tableview->verticalHeader()->hide();      

    //設置選中時爲整行選中            ui->student_tableview->setSelectionBehavior(QAbstractItemView::SelectRows);                    //設置表格的單元爲只讀屬性,即不能編輯            ui->student_tableview->setEditTriggers(QAbstractItemView::NoEditTriggers);          

    //若是你用在QTableView中使用右鍵菜單,需啓用該屬性            ui->tstudent_tableview->setContextMenuPolicy(Qt::CustomContextMenu);

 

三 動態添加行

    在表格中添加行時,咱們只須要在model中插入數據便可,一旦model中的數據發生變化,QTabelView顯示就會作相應的變更

    //在第一行添加學生張三的我的信息(setItem函數的第一個參數表示行號,第二個表示列號,第三個爲要顯示的數據)     student_model->setItem(0, 0, new QStandardItem(「張三"));     student_model->setItem(0, 1, new QStandardItem("20120202"));     student_model->setItem(0, 2, new QStandardItem("男"));     student_model->setItem(0, 3, new QStandardItem("18"));     student_model->setItem(0, 4, new QStandardItem("土木學院"));

四 設置數據顯示的樣式

    //設置單元格文本居中,張三的數據設置爲居中顯示     student_model->item(0, 0)->setTextAlignment(Qt::AlignCenter);     student_model->item(0, 1)->setTextAlignment(Qt::AlignCenter);     student_model->item(0, 2)->setTextAlignment(Qt::AlignCenter);     student_model->item(0, 3)->setTextAlignment(Qt::AlignCenter);     student_model->item(0, 4)->setTextAlignment(Qt::AlignCenter);

    //設置單元格文本顏色,張三的數據設置爲紅色     student_model->item(0, 0)->setForeground(QBrush(QColor(255, 0, 0)));     student_model->item(0, 1)->setForeground(QBrush(QColor(255, 0, 0)));     student_model->item(0, 2)->setForeground(QBrush(QColor(255, 0, 0)));     student_model->item(0, 3)->setForeground(QBrush(QColor(255, 0, 0)));     student_model->item(0, 4)->setForeground(QBrush(QColor(255, 0, 0)));

    //將字體加粗     student_model->item(0, 0)->setFont( QFont( "Times", 10, QFont::Black ) );     student_model->item(0, 1)->setFont( QFont( "Times", 10, QFont::Black ) );     student_model->item(0, 2)->setFont( QFont( "Times", 10, QFont::Black ) );     student_model->item(0, 3)->setFont( QFont( "Times", 10, QFont::Black ) );     student_model->item(0, 4)->setFont( QFont( "Times", 10, QFont::Black ) );

    //設置排序方式,按年齡降序顯示     student_model->sort(3, Qt::DescendingOrder);
 
數據庫與QTabelView
 
 
建立表的有關知識。
一、auto increment,是在插入記錄時,生成惟一的值,默認值是1, 每次遞增1.
相關文章
相關標籤/搜索