Я использовал следующий код для создания DSN из кода Python.
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(0)
attributes = []
for attr in kw.keys():
attributes.append("%s=%s" % (attr, kw[attr]))
return ctypes.windll.ODBCCP32.SQLConfigDataSource(0, ODBC_ADD_SYS_DSN, driver, nul.join(attributes))
if __name__ == "__main__":
if create_sys_dsn("SQL Server",SERVER="(localhost)", DESCRIPTION="Northwind SQL Server DSN", DSN="NorthwindDSN", Database="Northwind", Trusted_Connection="Yes"):
print ("DSN created")
else:
print ("DSN not created")
Но я сталкиваюсь со следующей ошибкой: -
Traceback (последний вызов был последним): File "testDB.py ", строка 27, если if_sys_dsn (" SQL Server ", SERVER =" (localhost) ", DESCRIPTION =" Северный ветер DSN SQL Server ", DSN =" Северный ветер ", База данных =" Северный ветер ", Trusted_Connection =" Да"): Файл" testDB.py ", строка 24, в create_sys_dsn возвращает ctypes.windll.ODBCCP32.SQLConfigDataSource (0, ODBC_ADD_SYS_DSN, драйвер, nul.join (атрибуты)) ctypes.ArgumentError: аргумент 4: внедренный нулевой символ
Может кто-нибудь, пожалуйста, помогите мне решить эту проблему.