我有一个表,我试图使用 dict 对象插入许多表。
engine = create_engine('sqlite:///:memory:', echo=True)
metadata = MetaData()
hockey= Table('hockey', metadata,
Column('team', String(16), primary_key=True),
Column('jersey_colour', String(16)),
Column('stadium', String(32)),
Column('goals', Integer),
Column('date', Date, primary_key=True),
Column('assists', Integer))
>>>data[0]
{'jersey_colour': u'Blue',
'team': u'Toronto Maple Leafs',
'stadium': u'Air Canada Center',
'date': '2013-03-25',
'assists': 301,
'goals': 151}
>>>data[1]
{'jersey_colour': u'Red',
'team': u'Calgary Flames',
'stadium': u'PenWest',
'date': '2013-03-25',
'assists': 254,
'goals': 147}
conn = engine.connect()
conn.execute(ins, data)
StatementError: SQLite Date 类型只接受 Python 日期对象作为输入。(原始原因:TypeError:SQLite Date 类型只接受 Python 日期对象作为输入。)'INSERT INTO "hockey" (team, jersey_colour, Stadium, goal, date, assistants) VALUES (?, ?, ?, ?, ?, ? )' [{'jersey_colour': 'Blue', 'team': 'Toronto Maple Leafs', 'stadium': u'Air Canada Centre', 'date': '2013-03-25', 'assists': 301 , '目标': 151}
第一个问题 - 将参数馈送到“?”的顺序是什么?事情。如您所见,字段显示如下:
team jersey_colour stadium goals date assists
但是,字典顺序是任意的:
jersey_colour team stadium date assists goals
这是 sqlite 或 mysql 的问题吗?理论上提供了密钥,因此它应该能够确定数据的存储位置,但我不确定。对于生产,我将使用 mysql 数据库,但对于测试,我使用 inmemory sqlite db。
第二个问题,错误:
StatementError: SQLite Date type only accepts Python date objects as input
我发现以下内容(https://groups.google.com/forum/?fromgroups=#!topic/sqlalchemy/EeZbkePPb38),上面写着:
SQLite 没有专门的 DATE 类型。SQLAlchemy 的 Date() 类型需要 Python 日期时间,即“import datetime; date = datetime.date(year, month day)”。
与 data 键配对的值是由 Python datetime.date 命令根据上面评论员所说的创建的。
>>>today_date = datetime.date.today()
所以我不确定为什么会发生错误。感谢您对问题 #1 和 #2 的帮助。谢谢你。