如题,弄 odbc 读取 access 数据库,目录路径是设置到 ini 配置文件里面,使用 config 读取后,无法打开,提示注册表问题好像,但是把路径写死到函数里面就可以,读取的变量属性都是 str, 比如路径为 d:\ee\data.mdb
谢谢楼上回复,代码是这样的
import configparser#引入读配置文件及其他模块
db_filename=config.get("user", "db_filename")
db_filename1="D:\pythontest\Data.mdb"
DBfile = r"Driver={Microsoft Access Driver (*.mdb, *.accdb)};DBQ=" + db_filename + ";Uid=;Pwd=;"#db_filename # 数据库文件
print(r"Driver={Microsoft Access Driver (*.mdb, *.accdb)};DBQ=" + db_filename + ";Uid=;Pwd=;")
conn = pyodbc.connect(DBfile)
#conn = pyodbc.connect("Driver={Microsoft Access Driver (*.mdb, *.accdb)};DBQ=D:\pythontest\dada.mdb;Uid=;Pwd=;")
cursor = conn.cursor()
SQL = "SELECT * from TestData where 日期>2018-01-16"
imagepathall = []
imagepathall = cursor.execute(imagepathallSQL % (resultID)).fetchall()
cursor.close()
conn.close()
1
xiaoyaoking 2018-01-16 20:57:57 +08:00 via Android
编码正常吗?
|
2
likuku 2018-01-16 22:19:26 +08:00
windows 啊,系统默认 GBK 编码,文件保存若选 Unicode 默认是 UTF-16
路径,最好是读成 raw 数据 /bytes 类型,再 decode('utf-8') 成 str 来用,这样就好。 |
3
likuku 2018-01-16 22:20:14 +08:00
.py 都选择使用 UTF-8,嗯当然是 py3 环境。
|
4
qile1 OP 把
db_filename=config.get("user", "db_filename") 改为这个就可以读取 db_filename="D:\\pythontest\\Data.mdb" 不改报错是: Driver={Microsoft Access Driver (*.mdb, *.accdb)};DBQ=D:\\pythontest\\xc\\dada.mdb;Uid=;Pwd=; ('HY000', "[HY000] [Microsoft][ODBC Microsoft Access Driver]常见错误 无法打开注册表项“ Temporary (volatile) Ace DSN for process 0x17e8 Thread 0x42d8 DBC 0x6e47f24 |
5
likuku 2018-01-16 23:41:29 +08:00
建议生成文件路径使用 os.path,自己拼 str 总会有点问题
|
6
likuku 2018-01-16 23:46:16 +08:00
import os
db_filename=os.path.join("D:","pythontest","Data.mdb") 参考: python os.path 模块常用方法详解-王伟-51CTO 博客 : http://blog.51cto.com/wangwei007/1104940 |
7
qile1 OP @likuku 非常感谢回复,这个文件地址是放到 ini 配置文件里面后期根据地址修改,还有很多配置参数也写里面了,数据路径读出来后
报这个错误 codecs.utf_16_le_encode(input, self.errors)[0] python3.6 我在想,我读取配置文件后,转为 utf-16-le 是否可行,但一直没转成功 |
8
likuku 2018-01-17 04:29:46 +08:00
@qile1 你可以尝试编辑,保存 配置文件 .ini 使用 UTF-8 编码,与 .py 处理方式一致。
Python 3.6.4 (default, Dec 21 2017, 00:56:19) [GCC 4.2.1 Compatible Apple LLVM 9.0.0 (clang-900.0.39.2)] on darwin Type "help", "copyright", "credits" or "license" for more information. >>> s='我是猫' >>> s.encode('utf-8') b'\xe6\x88\x91\xe6\x98\xaf\xe7\x8c\xab' >>> s.encode('utf-16') b'\xff\xfe\x11b/f+s' >>> s.encode('utf-16-le') b'\x11b/f+s' >>> b'\x11b/f+s'.decode('utf-16-le') '我是猫' 我之前遇到类似状况: macOS 的 文件系统里保存一些路径含有空格汉字和各种奇怪字符, 终端(UTF-8)下读到 /代码里 /配置文件(UTF-8)都正确,但 python3 通过 bash call 命令行的工具去访问这些路径时,就找不到了。 好在 python3 的 subprocess 支持路径信息可以直接使用 bytes 类型(按指定编码的字节流),只要原始字串路径是正确的,那么按文件系统 /shell 环境的编码转换后的 bytes 就可以被正确识别+执行。 你可尝试: 1. 你 .py 是直接运行(双击 .py 就关联解析器运行),那么 UTF-8 就 OK 的 2. 你的 .py 一个 cmd/powershell 窗口里运行,那么建议先在 cmd/powershell 里执行 chcp 65001 来让终端编码使用 UTF-8 或许你的 ODBC 驱动里也支持使用 bytes 类型访问数据文件,那么就可以试试: db_filename1="D:\pythontest\Data.mdb".encode("utf-8") |
9
likuku 2018-01-17 04:35:48 +08:00
|
10
mingl0280 2018-01-17 08:25:45 +08:00
db_filename="D:\\pythontest\\Data.mdb"
DBQ=D:\\pythontest\\xc\\dada.mdb 我觉得只是你配置文件路径错…… |