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.
相关文章
相关标签/搜索