热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

sqlite以及python的应用

有点乱,自己平时,遇到了就记下来,所以没整理。数据库sqlite,以及Qt对数据库的操作sql学习网址:sqlite官网:http:www.sqlite.orghttp:www.w3schoo

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

数据库sqlite,以及Qt对数据库的操作 sql学习网址:sqlite官网:http://www.sqlite.orghttp://www.w3school.com.cn/sql/sql_autoincrement.aspMySQL下载、安装、学习https://pypi.python.org/pypi/MySQL-pythonSQl:结构化查询语言 结构化查询语言(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):其语句包括动词INSERT,UPDATE和DELETE。它们分别用于添加,修改和删除表中的行。也称为动作查询语言。三:事务处理语言(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 查询:http://qt-project.org/doc/qt-4.7/qtsql.html 不需要服务器, 而且也不存在授权问题. 它是Python 中其它的持久存储解决方案的一个替代品, 一个拥有 SQL 访问界面的优秀替代品. 在标准库中有这么一个模块, 就能方便用户使用Python 和 SQLite 进行软件开发, 等到软件产品正式上市发布时, 只要需要, 就能够很容易的将产品使用的数据库后端变更为一个全功能的,更强大的类似 MySQL, PostgreSQL, Oracle 或 SQL Server 那样的数据库. 当然, 对那些不需要那么大马力的应用程序来说, SQLite 已经足够使用.在一个关系数据库中,数据存储在各个表中,表可以看成二维数据结构。每个列都应该具有相同到位数据结构。Method Name Descriptionclose() 关闭数据库连接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, conncx = 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框架:elixirhttp://www.boyunjian.com/v/softd/Elixir+ORM.htmlhttp://elixir.ematia.de/trac/wiki/TutorialDivingIn  官网http://www.2cto.com/kf/201311/255736.html数据库:sqliteSqlAchemy:http://zh.wikipedia.org/wiki/SQLAlchemyhttp://blog.csdn.net/bellwhl/article/details/9332685 学习网站:http://blog.csdn.net/acceptedxukai/article/details/7365133Trac的安装配置:http://software.intel.com/zh-cn/articles/Trac_install_configure      
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,REALPyQT支持的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.       

推荐阅读
  • 本文介绍了数据库的存储结构及其重要性,强调了关系数据库范例中将逻辑存储与物理存储分开的必要性。通过逻辑结构和物理结构的分离,可以实现对物理存储的重新组织和数据库的迁移,而应用程序不会察觉到任何更改。文章还展示了Oracle数据库的逻辑结构和物理结构,并介绍了表空间的概念和作用。 ... [详细]
  • 使用Ubuntu中的Python获取浏览器历史记录原文: ... [详细]
  • 本文由编程笔记小编整理,介绍了PHP中的MySQL函数库及其常用函数,包括mysql_connect、mysql_error、mysql_select_db、mysql_query、mysql_affected_row、mysql_close等。希望对读者有一定的参考价值。 ... [详细]
  • Java String与StringBuffer的区别及其应用场景
    本文主要介绍了Java中String和StringBuffer的区别,String是不可变的,而StringBuffer是可变的。StringBuffer在进行字符串处理时不生成新的对象,内存使用上要优于String类。因此,在需要频繁对字符串进行修改的情况下,使用StringBuffer更加适合。同时,文章还介绍了String和StringBuffer的应用场景。 ... [详细]
  • 计算机存储系统的层次结构及其优势
    本文介绍了计算机存储系统的层次结构,包括高速缓存、主存储器和辅助存储器三个层次。通过分层存储数据可以提高程序的执行效率。计算机存储系统的层次结构将各种不同存储容量、存取速度和价格的存储器有机组合成整体,形成可寻址存储空间比主存储器空间大得多的存储整体。由于辅助存储器容量大、价格低,使得整体存储系统的平均价格降低。同时,高速缓存的存取速度可以和CPU的工作速度相匹配,进一步提高程序执行效率。 ... [详细]
  • 安装mysqlclient失败解决办法
    本文介绍了在MAC系统中,使用django使用mysql数据库报错的解决办法。通过源码安装mysqlclient或将mysql_config添加到系统环境变量中,可以解决安装mysqlclient失败的问题。同时,还介绍了查看mysql安装路径和使配置文件生效的方法。 ... [详细]
  • 目录实现效果:实现环境实现方法一:基本思路主要代码JavaScript代码总结方法二主要代码总结方法三基本思路主要代码JavaScriptHTML总结实 ... [详细]
  • javascript  – 概述在Firefox上无法正常工作
    我试图提出一些自定义大纲,以达到一些Web可访问性建议.但我不能用Firefox制作.这就是它在Chrome上的外观:而那个图标实际上是一个锚点.在Firefox上,它只概述了整个 ... [详细]
  • 如何用UE4制作2D游戏文档——计算篇
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了如何用UE4制作2D游戏文档——计算篇相关的知识,希望对你有一定的参考价值。 ... [详细]
  • 图解redis的持久化存储机制RDB和AOF的原理和优缺点
    本文通过图解的方式介绍了redis的持久化存储机制RDB和AOF的原理和优缺点。RDB是将redis内存中的数据保存为快照文件,恢复速度较快但不支持拉链式快照。AOF是将操作日志保存到磁盘,实时存储数据但恢复速度较慢。文章详细分析了两种机制的优缺点,帮助读者更好地理解redis的持久化存储策略。 ... [详细]
  • C# 7.0 新特性:基于Tuple的“多”返回值方法
    本文介绍了C# 7.0中基于Tuple的“多”返回值方法的使用。通过对C# 6.0及更早版本的做法进行回顾,提出了问题:如何使一个方法可返回多个返回值。然后详细介绍了C# 7.0中使用Tuple的写法,并给出了示例代码。最后,总结了该新特性的优点。 ... [详细]
  • 基于事件驱动的并发编程及其消息通信机制的同步与异步、阻塞与非阻塞、IO模型的分类
    本文介绍了基于事件驱动的并发编程中的消息通信机制,包括同步和异步的概念及其区别,阻塞和非阻塞的状态,以及IO模型的分类。同步阻塞IO、同步非阻塞IO、异步阻塞IO和异步非阻塞IO等不同的IO模型被详细解释。这些概念和模型对于理解并发编程中的消息通信和IO操作具有重要意义。 ... [详细]
  • 本文详细介绍了在ASP.NET中获取插入记录的ID的几种方法,包括使用SCOPE_IDENTITY()和IDENT_CURRENT()函数,以及通过ExecuteReader方法执行SQL语句获取ID的步骤。同时,还提供了使用这些方法的示例代码和注意事项。对于需要获取表中最后一个插入操作所产生的ID或马上使用刚插入的新记录ID的开发者来说,本文提供了一些有用的技巧和建议。 ... [详细]
  • 本文介绍了一个在线急等问题解决方法,即如何统计数据库中某个字段下的所有数据,并将结果显示在文本框里。作者提到了自己是一个菜鸟,希望能够得到帮助。作者使用的是ACCESS数据库,并且给出了一个例子,希望得到的结果是560。作者还提到自己已经尝试了使用"select sum(字段2) from 表名"的语句,得到的结果是650,但不知道如何得到560。希望能够得到解决方案。 ... [详细]
  • 本文详细介绍了MySQL表分区的创建、增加和删除方法,包括查看分区数据量和全库数据量的方法。欢迎大家阅读并给予点评。 ... [详细]
author-avatar
对不起太依赖你
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有