I have gotten around this issue with other languages and other ODBC api's by:
Yes No field in Access is either -1, 0 no nulls. I have had success by passing a non null tiny int/small int to an access Yes/No field if it is already pre-exisiting.
For table creation with an access Yes/No field, I pass thru a DDL statement to access to create the table then populate it with non null -1,0 values as neccessary for Yes/No True/False.
The DDL field type to pass is "YESNO"
CREATE TABLE TestAllTypes
(
MyText TEXT(50),
MyMemo MEMO,
MyByte BYTE,
MyInteger INTEGER,
MyLong LONG,
MyAutoNumber COUNTER,
MySingle SINGLE,
MyDouble DOUBLE,
MyCurrency CURRENCY,
MyReplicaID GUID,
MyDateTime DATETIME,
MyYesNo YESNO,
MyOleObject LONGBINARY,
MyBinary BINARY(50)
)
I would imagine that a DDL "Alter Table" would work in a similiar manner. I believe PyODBC requires you to commit when you pass the DDL SQL...
import pyodbc
con = pyodbc.connect(r'DRIVER={Microsoft Access Driver (*.mdb, *.accdb)};DBQ=Z:\Data\Instruments\testDB.accdb; Provider=MSDASQL;'cur = con.cursor()
string = "CREATE TABLE TestTable(symbol Text(15), leverage double, shares YESNO, price double)"
cur.execute(string)
con.commit()