`
john2007
  • 浏览: 76044 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

利用python操作access,sql server数据库

阅读更多

本文主要介绍了python如何利用 ADO访问windows平台下的数据库,比如access,sql server.

(译者注:作者原文用的IDE是pythonwin,但我的pytonwin重装了两遍了就是用不起来,就算写个helloworld运行也崩掉,妈的,只好用IDLE了)

Table of Contents

 

  1. Running MakePy
  2. DSN
  3. Opening a Recordset
  4. Looking at the Recordset
  5. Adding new Records
  6. Database Table Information
  7. Closing Connections
  8. Using SQL with ADO
  9. Getting the RecordCount
  10. Common Questions and Answers about Python and ADO.

 

 

  1. 首先要做的就是运行makepy组件。这不是必须的,但是它可以improves speed and makes life in the PythonWin IDE that much easier. 从pythonWin的菜单里选择com makepy Utility,然后选择 Microsoft ActiveX Data object 2.5 Library.
  2. 下一步我们需要一个DSN(data source name)和一个connection 对象,对于access可以直接拷贝下面的字符串,对其他的数据库或者要设置一些高级选项,可以去[控制面板 | 管理工具 | 数据源 ]。在那里,我们可以建立一个系统DSN,或者把它(它只是一个文本文件)作为字符串拷贝进剪贴板,也可以建立一个DNS-less connection string。我们也可以在网上搜索其他数据库的DNS-less connection string,比如:sql server,access,foxPro,oracle, 还有 mysql.
    >>> import win32com.client
    >>> conn = win32com.client.Dispatch(r'ADODB.Connection')
    >>> DSN = 'PROVIDER=Microsoft.Jet.OLEDB.4.0;DATA SOURCE=C:/MyDB.mdb;'
    >>> conn.Open(DSN)
    有了这些设置,我们访问数据库就是易如反掌了。
  3. 下一步的任务是打开一个recordset。对于一些有趣的东西比如joins或者类似的,我们可以用select * from talbename 类型的声明,或者只用一个中括号把表明括起来。
    >>> rs = win32com.client.Dispatch(r'ADODB.Recordset')
    >>> rs_name = 'MyRecordset'
    >>> rs.Open('[' + rs_name + ']', conn, 1, 3)
    
     对于参数1和3,分别表示:adOpenKeyset and adLockOptimistic 。对他们的解释已经超出了本指南的范围,请参考相关资料。
  4. 有了打开的recordset我们就可以遍历字段:                                                                                           >>> flds_dict = {}
    >>> for x in range(rs.Fields.Count):
    ...     flds_dict[x] = rs.Fields.Item(x).Name
    字段的类型和大小可以这样得到:                                                                                                       >>> print rs.Fields.Item(1).Type
     202 # 202 is a text field
    >>> print rs.Fields.Item(1).DefinedSize                                                                                       50  # 50 Characters

添加新的记录可以用insert语句,或者直接调用AddNew() or Update()方法:                                             >>> rs.AddNew()
        >>> rs.Fields.Item(1).Value = 'data'
        >>> rs.Update()
These values can be also be returned.

        >>> x = rs.Fields.Item(1).Value
        >>> print x
        'data'
        

So, if one wants to create a new Record, and know what number an AutoNumber field has generated for it without having to query the database ...

        >>> rs.AddNew()
        >>> x = rs.Fields.Item('Auto_Number_Field_Name').Value  
        # x contains the AutoNumber
        >>> rs.Fields.Item('Field_Name').Value = 'data'
        >>> rs.Update()
      
  • You can get a list of the Tables in a Database using ADO.
  •  

  •         >>> oCat = win32com.client.Dispatch(r'ADOX.Catalog')
            >>> oCat.ActiveConnection = conn
            >>> oTab = oCat.Tables
            >>> for x in oTab:
            ...     if x.Type == 'TABLE':
            ...         print x.Name
            

            >>> conn.Close()
            

            >>> conn = win32com.client.Dispatch(r'ADODB.Connection')
            >>> DSN = 'PROVIDER=Microsoft.Jet.OLEDB.4.0;DATA SOURCE=C:/MyDB.mdb;'
            >>> sql_statement = "INSERT INTO [Table_Name] 
                                 ([Field_1], [Field_2]) VALUES ('data1', 'data2')"
            >>> conn.Open(DSN)
            >>> conn.Execute(sql_statement)
            >>> conn.Close()
            >>> # See example 3 above for the set-up to this 
            >>> rs.MoveFirst()
            >>> count = 0
            >>> while 1:
            ...     if rs.EOF:
            ...         break
            ...     else:
            ...         count = count + 1
            ...         rs.MoveNext()
            
    Aside from being horribly inefficient, if the recordset is empty, moving to the first record will generate an error. ADO provides a way to correct this. Before opening the recordset, set the CursorLocation to 3. After opening the recordset, the recordcount will be available.
            >>> rs.Cursorlocation = 3 # don't use parenthesis here
            >>> rs.Open('SELECT * FROM [Table_Name]', conn) # be sure conn is open
            >>> rs.RecordCount # no parenthesis here either
            186
            
    [Again, the 3 is a constant.]
           

     

     

  • Close the connection. Notice that to close this connection the 'C' is upper case, whereas to close a file opened with python the 'c' is lower case.
  • To use SQL to INSERT or UPDATE data, use a Connection object directly.
  • Here is a last example that often seems to be a sticking point with ADO. Generally, if one wants to get the RecordCount of a table, one must move through all of the records counting them along the way like ...
  • This really just scratches the surface of ADO, but it should help getting connected from Python. For anything more than just simple database scripting it is worth looking into the object model. Here are some links that might be helpful.
    http://msdn.microsoft.com/library/default.asp?url=/library/en-us/ado270/htm/mdmscadoobjmod.asp
    http://www.activeserverpages.ru/ADO/dadidx01_1.htm

     

     

     

      Python编程语言的出现,带给开发人员非常大的好处。我们可以利用这样一款功能强大的面向对象开源语言来轻松的实现许多特定功能需求。比如Python操作Access数据库的功能实现等等。在Python操作Access数据库之前,首先,你应安装了Python和Python for Windows extensions。

      Python操作Access数据库步骤之1、建立数据库连接

    1. import win32com.client   
    2. conn = win32com.client.Dispatch(r'ADODB.Connection')   
    3. DSN = 'PROVIDER=Microsoft.Jet.OLEDB.4.0;DATA SOURCE=C:/MyDB.mdb;'   
    4. conn.Open(DSN) 

    Python操作Access数据库步骤之2、打开一个记录集

    1. rs = win32com.client.Dispatch(r'ADODB.Recordset')   
    2. rs_name = 'MyRecordset'#表名   
    3. rs.Open('[' + rs_name + ']', conn, 1, 3) 

    Python操作Access数据库步骤之3、对记录集操作

    1. rs.AddNew()   
    2. rs.Fields.Item(1).Value = 'data'   
    3. rs.Update() 

    Python操作Access数据库步骤之4、用SQL来插入或更新数据

    1. conn = win32com.client.Dispatch(r'ADODB.Connection')   
    2. DSN = 'PROVIDER=Microsoft.Jet.OLEDB.4.0;DATA SOURCE=C:/MyDB.mdb;'   
    3. sql_statement = "Insert INTO [Table_Name] ([Field_1], 
      [Field_2]) VALUES ('data1', 'data2')"
         
    4. conn.Open(DSN)   
    5. conn.Execute(sql_statement)   
    6. conn.Close() 

    Python操作Access数据库步骤之5、遍历记录

    1. rs.MoveFirst()   
    2. count = 0   
    3. while 1:   
    4. if rs.EOF:   
    5. break   
    6. else:   
    7. countcount = count + 1   
    8. rs.MoveNext() 

    注意:如果一个记录是空的,那么将指针移动到第一个记录将导致一个错误,因为此时recordcount是无效的。解决的方法是:打开一个记录集之前,先将Cursorlocation设置为3,然后再打开记录集,此时recordcount将是有效的。例如:

    1. rs.Cursorlocation = 3 # don't use parenthesis here   
    2. rs.Open('Select * FROM [Table_Name]', conn) # be sure conn is open   
    3. rs.RecordCount # no parenthesis here either 

    以上就是我们对Python操作Access数据库步骤的相关介绍。

     

    分享到:
    评论

    相关推荐

      python数据库编程:Python连接Mssql基础教程之Python库pymssql.pdf

      python数据库编程:Python连接Mssql基础教程之Python库pymssql 前⾔ pymssql模块是⽤于sql server数据库(⼀种数据库通⽤接⼝标准)的连接。另外pyodbc不仅限于SQL server,还包括 Oracle,MySQL,Access,Excel等。 本...

      Python连接Mssql基础教程之Python库pymssql

      pymssql模块是用于sql server数据库(一种数据库通用接口标准)的连接。另外pyodbc不仅限于SQL server,还包括Oracle,MySQL,Access,Excel等。 另外除了pymssql,pyodbc还有其他几种连接SQL server的模块,感兴趣的...

      pythonmssql数据库开发-Python连接Mssql基础教程之Python库pymssql.pdf

      pythonmssql数据库开发_Python连接Mssql基础教程之Python 库pymssql 前⾔ pymssql模块是⽤于sql server数据库(⼀种数据库通⽤接⼝标准)的连接。另外pyodbc不仅限于SQL server,还包括 Oracle,MySQL,Access,Excel等...

      就业预测系统 框架 vs2019 + asp.net webform + echart 数据库 sql server

      注意sql server类和access数据库可以使用vs自带的数据库启动,不需要安装庞大的sql安装包。 就业预测系统(主要连接处理学生成绩管理系统的数据的数据用户数据统计展示) 模块介绍 数据管模块,数据显示模块,数据...

      【ASP.NET编程知识】将Access数据库中数据导入到SQL Server中的详细方法实例.docx

      【ASP.NET编程知识】将Access数据库中数据导入到SQL Server中的详细方法实例.docx

      python–数据库 00 初识数据库和SQL

      在本教程中,您将学到如何使用 SQL 访问和处理数据系统中的数据,这类数据库包括:Oracle, Sybase, SQL Server, DB2, Access 等等。 数据库引入 socket编程中,客户端从服务端下载一个文件,这个文件应该存在哪? ...

      SqlMap-Sql注入

      完全支持MySQL、Oracle、PostgreSQL、Microsoft SQL Server、Microsoft Access、IBM DB2、SQLite、Firebird、Sybase、SAP MaxDB、HSQLDB和Informix等多种数据库管理系统。 完全支持布尔型盲注、时间型盲注、基于错误...

      浅谈Mysql、SqlServer、Oracle三大数据库的区别

      是开源数据库,提供的接口支持多种语言连接操作 ; MySQL的核心程序采用完全的多线程编程。线程是轻量级的进程,它可以灵活地为用户提供服务,而不过多的系统资源。用多线程和C语言实现的mysql能很容易充分利用CPU...

      就业预测系统,框架 vs2019 + asp.net webform + echart+sql server

      注意sql server类和access数据库可以使用vs自带的数据库启动,不需要安装庞大的sql安装包。 就业预测系统(主要连接处理学生成绩管理系统的数据的数据用户数据统计展示) 模块介绍 数据管模块,数据显示模块,数据...

      基于MySQL玩转SQL数据分析课程 互联网数据分析师-SQL数据分析实战视频教程.txt

      (22)\SQL课程素材软件下载\SQL素材下载\第三章 数Ju库工具\SQL server 2008\数据库文件;目录中文件数:1个 ├─(79) 学生管理数据库.bak (23)\SQL课程素材软件下载\SQL软件下载\window下\MySQL 5.7版本\安装不行就...

      sqlmap免Python环境Windows版

      sqlmap是一个自动化的SQL注入工具,其主要功能是扫描,发现并利用给定的URL的SQL注入漏洞,目前支持的数据库是MySQL, Oracle, PostgreSQL, Microsoft SQL Server, Microsoft Access, IBM DB2, SQLite, Firebird, ...

      Unidac3.5所有源码版

      UniDAC 是一个完整的标准数据库连接解决方案,可以支持 Oracle, SQL Server, MySQL, InterBase, 和 Firebird。 Universal Data Access Components (UniDAC) is a library of components that provides direct ...

      Oracle 工具

      object browser主要操作人性化;但在平时的程序开发过程中,就算使用了以上工具,感觉还不是特别方便; <br>本工具: <br>1.能便利的生成各种常见sql 语句; 2.在各个列表上点右键实现排序,过滤,查找,打印,...

      就业预测系统asp.net webform echart

      注意sql server类和access数据库可以使用vs自带的数据库启动,不需要安装庞大的sql安装包。 就业预测系统(主要连接处理学生成绩管理系统的数据的数据用户数据统计展示) 模块介绍 数据管模块,数据显示模块,数据...

      毕业设计:ASP+ACCESS在线手机销售系统(源代码)

      服务器端为本系统和SQL SERVER 2000数据库服务器,如果考虑到性能,可以将本系统部署在应用服务器上,通过应用服务器访问数据库服务器。系统后端主要面向的是系统管理员和数据库管理员,系统在开发的过程中力求做到...

      sqlmap 渗透测试工具

      SQLMAP是一款由Python开发的自动化SQL注入工具,其主要功能是扫描、发现并利用SQL注入漏洞,它内置了很多绕过插件,并且支持多种数据库,如MySQL、Oracle、PostgreSQL、SQL Server、Access、IBM DB2、SQLite等数据库...

      数据库课程设计.zip

      3、数据库管理系统不限(Oracle\SQL Server\MySQL\Access\SQLite…),开发语言不限(C++\JAVA\C#\ASP.net…),避免把学习语言的时间放在设计期间; 4、从开始的系统需求分析到最后的实现,都要有详细的计划,设计...

      南京邮电大学通达学院 数据库 课内实验报告 1 2

      根据实际问题,分析业务处理流程,确定系统所需功能,设计合理的数据库结构,使用SQL Server或MySQL或ACCESS等系统,采用自己熟悉的开发语言(JAVA或Python或C++等)设计开发一个小型的数据库应用系统

      Sqlmap使用手册中文版

      完全支持MySQL、Oracle、PostgreSQL、Microsoft SQL Server、Microsoft Access、IBM DB2、SQLite、Firebird、Sybase、SAP MaxDB、HSQLDB和Informix等多种数据库管理系统。 完全支持布尔型盲注、时间型盲注、基于错误...

      南京邮电大学通达学院数据库实验两次

      根据实际问题,分析业务处理流程,确定系统所需功能,设计合理的数据库结构,使用SQL Server或MySQL或ACCESS等系统,采用自己熟悉的开发语言(JAVA或Python或C++等)设计开发一个小型的数据库应用系统;

    Global site tag (gtag.js) - Google Analytics