目录
因为最近经常加班,工作内容大部分都是一些重复性的工作,总是要写一些SQL语句去更新、删除、查询,而access又只能一条一条的执行,就搞得心力憔悴。于是想起了当初学python的目的,不就是为了去做重复性的工作而解放双手吗?然后就在网上查询方法,在躺过无数个坑之后,终于皇天不负有心人,总算找到了解决办法并成功解放双手,嘿嘿!下面就将自己所用的方法整理出来方便以后自己查询,同时也希望能帮助有需求的朋友避免再次躺坑。
在开始之前我们首先要知道pyodbc是什么?能帮助我们干什么?确定是否能解决自己遇到的问题。首先pyodbc是一个Python模块,能够让你使用 ODBC 连接来自Windows, Linux, OS/X等系统中的大部分数据库。因为目前自己只用于access数据库,其他数据库也没有去过多的实验。本章实战我们就用来连接access,实现对MDB的增、删、改、查。
以我自己的电脑配置为例:python版本是3.8,32位。access是2010版本
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple pyodbc --user
或者使用:pip install pyodbc 安装,反正能正常安装就好。
我当时是用清华镜像安装,报错下面这个错误

出现这个错误的原因是Python本地版本与下载的第三方模块安装包不匹配,因为清华镜像下载的是最新版本,如果报错,需要去手动下载匹配版本的模块安装包。
下载地址(https://www.lfd.uci.edu/~gohlke/pythonlibs/)
cp38是python的版本号
win32是第三方模块的版本

下载成功之后在cmd找到下载后安装包存放的位置,执行下面这句安装即可。
pip install pyodbc-4.0.32-cp38-cp38-win32.whl
如下图所示:前面几个报错是因为我下载的版本与python版本不匹配,最后一个则是下载匹配的版本之后成功安装。

| pyodbc.connect | 连接数据库 |
| xxx.cursor() | 创建游标 |
| cursor.execute() | 所有的SQL语句都用cursor.execute函数运行 |
| cursor.rowcount | 获取SQL语句执行的条数 |
| cursor.commit() | 提交数据 |
| cursor.close() | 关闭游标 |
| connect.close() | 断开连接 |
为了方便执行其他mdb数据库,这里我用了个灵活点的方式,创建一个path变量,在执行的时候输入mdb数据库的路径即可
(列如我的mdb文件存在桌面上,那么我输入C:\Users\Administrator\Desktop\测试.mdb)
# 导入库
import pyodbc
# 创建输入路径
path = input('请输入处理数据路径:')
# 连接数据库
conn = pyodbc.connect(r"DRIVER={Microsoft Access Driver (*.mdb, *.accdb)};DBQ="+ path +";Uid=;Pwd=;")
# 创建游标
cursor = conn.cursor()
注意:
1、所有的SQL语句都用cursor.execute()函数运行
2、调用cnxn.commit()函数,否者你对数据库的所有操作将会失效!
# 导入模块
import pyodbc
# 创建路径
path = input('请输入处理数据路径:')
# 连接数据库
conn = pyodbc.connect(r"DRIVER={Microsoft Access Driver (*.mdb, *.accdb)};DBQ="+ path +";Uid=;Pwd=;")
# 创建游标
cursor = conn.cursor()
# 执行SQL语句,创建表
cursor.execute("create table [测试表]")
# 提交数据
cursor.commit()
| 文本型 | text | 用于输入文本或文本与数字相结合的数据 |
| 货币型 | Currency | 用来存储货币值,即与货币相关的数据,占8个字节,在计算中禁止四舍五入。 |
| 数字型 | Number | 用于存储数值数据,可以进行数值计算的数据,但货币除外 |
| 日期/时间型 | Date/Time | 用于存储日期和(或)时间值,占8个字节。 |
| 自动编号型 | AutoNumber | 默认是长整型,自动编号不能更新。 |
| 是/否型 | Yes/No | 又称为布尔型类型,用于存储逻辑值(是/否、真/假、开/关),占1个字节。 |
| OLE对象型 | OLE Object | 用于使用OLE协议在其它程序中创建的OLE对象(如Word文档、Excel电子表格、图片、声音等),最多存储1GB(受磁盘空间限制)。 |
| 附件 | 附件类型是存储数字图像等二进制文件的首选数据类型。 | |
| 超链接型 | Hyper Link | 用于存放通过超链接方式链接的Windows对象,如通过超链接跳转至文档、网页等。 |
创建字段CS1,CS2到测试表中,字段类型为文本,大小为默认(255)
# 执行SQL语句创建字段
cursor.execute("Alter Table 测试表 Add Column CS1 text,CS2 text")
# 提交数据
cursor.commit()
# 执行SQL语句插入数据
cursor.execute("insert into 测试表(CS1,CS2) values ('西游记','吴承恩')")
# 提交数据
cursor.commit()
完整的连接mdb数据库并查询数据代码如下:
# 执行SQL语句
cursor.execute("select CS1, CS2 from 测试表")
# 返回查询结果
row = cursor.fetchone()
# 打印查询结果
print(row)
# 执行SQL语句更新数据
cursor.execute("update 测试表 set cs1='三国演义'")
# 提交数据
cursor.commit()
# 执行SQL语句删除数据
cursor.execute("delete from 测试表 where cs1='三国演义'")
# 提交数据
cursor.commit()
以上就是今天要分享的内容,本文仅仅简单介绍了pyodbc的使用,而pyodbc提供了大量能使我们快速便捷地处理数据的函数和方法去处理重复性的工作,所以加油吧!少年!人生苦短,我学python!!!
我正在学习如何使用Nokogiri,根据这段代码我遇到了一些问题:require'rubygems'require'mechanize'post_agent=WWW::Mechanize.newpost_page=post_agent.get('http://www.vbulletin.org/forum/showthread.php?t=230708')puts"\nabsolutepathwithtbodygivesnil"putspost_page.parser.xpath('/html/body/div/div/div/div/div/table/tbody/tr/td/div
总的来说,我对ruby还比较陌生,我正在为我正在创建的对象编写一些rspec测试用例。许多测试用例都非常基础,我只是想确保正确填充和返回值。我想知道是否有办法使用循环结构来执行此操作。不必为我要测试的每个方法都设置一个assertEquals。例如:describeitem,"TestingtheItem"doit"willhaveanullvaluetostart"doitem=Item.new#HereIcoulddotheitem.name.shouldbe_nil#thenIcoulddoitem.category.shouldbe_nilendend但我想要一些方法来使用
我有一个Ruby程序,它使用rubyzip压缩XML文件的目录树。gem。我的问题是文件开始变得很重,我想提高压缩级别,因为压缩时间不是问题。我在rubyzipdocumentation中找不到一种为创建的ZIP文件指定压缩级别的方法。有人知道如何更改此设置吗?是否有另一个允许指定压缩级别的Ruby库? 最佳答案 这是我通过查看rubyzip内部创建的代码。level=Zlib::BEST_COMPRESSIONZip::ZipOutputStream.open(zip_file)do|zip|Dir.glob("**/*")d
类classAprivatedeffooputs:fooendpublicdefbarputs:barendprivatedefzimputs:zimendprotecteddefdibputs:dibendendA的实例a=A.new测试a.foorescueputs:faila.barrescueputs:faila.zimrescueputs:faila.dibrescueputs:faila.gazrescueputs:fail测试输出failbarfailfailfail.发送测试[:foo,:bar,:zim,:dib,:gaz].each{|m|a.send(m)resc
很好奇,就使用rubyonrails自动化单元测试而言,你们正在做什么?您是否创建了一个脚本来在cron中运行rake作业并将结果邮寄给您?git中的预提交Hook?只是手动调用?我完全理解测试,但想知道在错误发生之前捕获错误的最佳实践是什么。让我们理所当然地认为测试本身是完美无缺的,并且可以正常工作。下一步是什么以确保他们在正确的时间将可能有害的结果传达给您? 最佳答案 不确定您到底想听什么,但是有几个级别的自动代码库控制:在处理某项功能时,您可以使用类似autotest的内容获得关于哪些有效,哪些无效的即时反馈。要确保您的提
假设我做了一个模块如下:m=Module.newdoclassCendend三个问题:除了对m的引用之外,还有什么方法可以访问C和m中的其他内容?我可以在创建匿名模块后为其命名吗(就像我输入“module...”一样)?如何在使用完匿名模块后将其删除,使其定义的常量不再存在? 最佳答案 三个答案:是的,使用ObjectSpace.此代码使c引用你的类(class)C不引用m:c=nilObjectSpace.each_object{|obj|c=objif(Class===objandobj.name=~/::C$/)}当然这取决于
我正在尝试使用ruby和Savon来使用网络服务。测试服务为http://www.webservicex.net/WS/WSDetails.aspx?WSID=9&CATID=2require'rubygems'require'savon'client=Savon::Client.new"http://www.webservicex.net/stockquote.asmx?WSDL"client.get_quotedo|soap|soap.body={:symbol=>"AAPL"}end返回SOAP异常。检查soap信封,在我看来soap请求没有正确的命名空间。任何人都可以建议我
我正在尝试设置一个puppet节点,但rubygems似乎不正常。如果我通过它自己的二进制文件(/usr/lib/ruby/gems/1.8/gems/facter-1.5.8/bin/facter)在cli上运行facter,它工作正常,但如果我通过由rubygems(/usr/bin/facter)安装的二进制文件,它抛出:/usr/lib/ruby/1.8/facter/uptime.rb:11:undefinedmethod`get_uptime'forFacter::Util::Uptime:Module(NoMethodError)from/usr/lib/ruby
关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题?更新问题,以便editingthispost可以用事实和引用来回答它.关闭4年前。Improvethisquestion我想在固定时间创建一系列低音和高音调的哔哔声。例如:在150毫秒时发出高音调的蜂鸣声在151毫秒时发出低音调的蜂鸣声200毫秒时发出低音调的蜂鸣声250毫秒的高音调蜂鸣声有没有办法在Ruby或Python中做到这一点?我真的不在乎输出编码是什么(.wav、.mp3、.ogg等等),但我确实想创建一个输出文件。
我在我的项目目录中完成了compasscreate.和compassinitrails。几个问题:我已将我的.sass文件放在public/stylesheets中。这是放置它们的正确位置吗?当我运行compasswatch时,它不会自动编译这些.sass文件。我必须手动指定文件:compasswatchpublic/stylesheets/myfile.sass等。如何让它自动运行?文件ie.css、print.css和screen.css已放在stylesheets/compiled。如何在编译后不让它们重新出现的情况下删除它们?我自己编译的.sass文件编译成compiled/t