sqlite以及python的应用

有点乱,自己平时,遇到了就记下来,所以没整理。

数据库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() 这样定义了一个游标。游标对象有以下的操作:

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(),则首先返回列表中的第一项,再次使用,则返回第二项,依次下去.

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

cx.commit() 注意,修改数据以后提交

5,删除: cu.execute("delete from catalog where id = 1")  cx.commit() 以上简单的操作反应的Python SQLITE数据库操作的基本要点,这里点到为止.然后,SQLite的强大,并不仅限于此,其对SQL高级特性的支持及其小巧灵活的特点,使得 SQLite在众多领域受到开发者的青睐.

 

 
Orm框架:exlir
数据库:sqlite
SqlAchemy:
 
学习网站:
Trac的安装配置:
 
 
 
 
 
 
Qt对sqlite数据库的操作:
 
 
 
QtSql模块层次结构:
1、驱动层
2、SQL接口层:数据库连接由QSqlDatabase提供,QsqlQuery提供了与数据库的交互操作
3、用户接口层:提供了从数据库数据到用于数据表示的窗体的映射。
 
 
首先建立数据库连接;
然后定义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);   

    //设置表格的各列的宽度值            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
 
 
创建表的有关知识。
1、auto increment,是在插入记录时,生成唯一的值,默认值是1, 每次递增1.
 
 
 
 
 
 
 

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。