我更喜欢用dsn连接数据库。我不喜欢把用户名和密码放在代码或配置文件中,也不喜欢可信连接方法。
当我谷歌如何用Python管理dsn时,我得到了下面的一些变化。
import ctypes
ODBC_ADD_DSN = 1 # Add data source
ODBC_CONFIG_DSN = 2 # Configure (edit) data source
ODBC_REMOVE_DSN = 3 # Remove data source
ODBC_ADD_SYS_DSN = 4 # add a system DSN
ODBC_CONFIG_SYS_DSN = 5 # Configure a system DSN
ODBC_REMOVE_SYS_DSN = 6 # remove a system DSN
def create_sys_dsn(driver, **kw):
"""Create a system DSN
Parameters:
driver - ODBC driver name
kw - Driver attributes
Returns:
0 - DSN not created
1 - DSN created
"""
nul = chr(32)
attributes = []
for attr in kw.keys():
attributes.append("%s=%s" % (attr, kw[attr]))
if (ctypes.windll.ODBCCP32.SQLConfigDataSource(0, ODBC_ADD_SYS_DSN, driver, nul.join(attributes))):
return True
else:
print(ctypes.windll.ODBCCP32.SQLInstallerError)
return False
if __name__ == "__main__":
if create_sys_dsn("SQL Server",SERVER="server name", DESCRIPTION="SQL Server DSN", DSN="SQL SERVER DSN", Database="ODS", Trusted_Connection="Yes"):
print ("DSN created")
else:
print ("DSN not created")
当您运行此命令时,我将得到如下输出:
<_FuncPtr object at 0x0000028E274C8930>
我有两个问题
- 我不习惯通过API与操作系统一起工作,我找不到很多不是c++的文档或使用示例。也就是说,代码运行时,它永远不会返回true。
- 我不知道如何让它踢出错误信息,所以我可以诊断问题。这段代码在日志中没有留下任何足迹,所以在事件查看器中没有显示任何错误。
如何解决这个问题?我走这条路对吗?用Python连接数据库的最佳实践到底是什么?
这个问题实际上有两个答案。
-
你可以在Python中调用PowerShell脚本。
-
你不。您在连接字符串中使用可信连接。
我选择了选项2。