SQLAlchemy TypeError:必须是字符串或缓冲区,而不是日期时间。日期

2024-05-23 14:10:24 发布

您现在位置:Python中文网/ 问答频道 /正文

问题是我有几个日期列,而sqlalchemy似乎将它们错误地转换为unicode。这将引发TypeError:必须是string或buffer,而不是日期时间。日期时间在处理器函数中。在

我有一个堆栈跟踪(带有来自调试器的一些注释):

[2017-01-03 11:20:20,026] {C:\\www\\flask_app\\virtualenv\\lib\\site-packages\flask\app.py:1587} ERROR - Exception on /api/util_tap [GET]
Traceback (most recent call last):
  File "C:\\www\\flask_app\\virtualenv\\lib\\site-packages\flask\app.py", line 1988, in wsgi_app
    response = self.full_dispatch_request()
  File "C:\\www\\flask_app\\virtualenv\\lib\\site-packages\flask\app.py", line 1641, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "C:\\www\\flask_app\\virtualenv\\lib\\site-packages\flask_cors\extension.py", line 161, in wrapped_function
    return cors_after_request(app.make_response(f(*args, **kwargs)))
  File "C:\\www\\flask_app\\virtualenv\\lib\\site-packages\flask\app.py", line 1544, in handle_user_exception
    reraise(exc_type, exc_value, tb)
  File "C:\\www\\flask_app\\virtualenv\\lib\\site-packages\flask\app.py", line 1639, in full_dispatch_request
    rv = self.dispatch_request()
  File "C:\\www\\flask_app\\virtualenv\\lib\\site-packages\flask\app.py", line 1625, in dispatch_request
    return self.view_functions[rule.endpoint](**req.view_args)
  File "c:\\www\\flask_app\\virtualenv\\src\\flask-restless\flask_restless\views\base.py", line 391, in new_func
    return func(*args, **kw)
  File "c:\\www\\flask_app\\virtualenv\\src\\flask-restless\flask_restless\views\base.py", line 340, in new_func
    return func(*args, **kw)
  File "c:\\www\\flask_app\\virtualenv\\src\\flask-restless\flask_restless\views\base.py", line 244, in new_func
    return func(*args, **kw)
  File "C:\\www\\flask_app\\virtualenv\\lib\\site-packages\flask\views.py", line 84, in view
    return self.dispatch_request(*args, **kwargs)
  File "C:\\www\\flask_app\\virtualenv\\lib\\site-packages\flask\views.py", line 149, in dispatch_request
    return meth(*args, **kwargs)
  File "c:\\www\\flask_app\\virtualenv\\src\\flask-restless\flask_restless\views\base.py", line 444, in wrapped
    return func(*args, **kw)
  File "c:\\www\\flask_app\\virtualenv\\src\\flask-restless\flask_restless\views\resources.py", line 398, in get
    return self._get_collection()
  File "c:\\www\\flask_app\\virtualenv\\src\\flask-restless\flask_restless\views\resources.py", line 369, in _get_collection
    group_by=group_by, single=single)
  File "c:\\www\\flask_app\\virtualenv\\src\\flask-restless\flask_restless\views\base.py", line 1717, in _get_collection_helper
    included = self.get_all_inclusions(instances)
  File "c:\\www\\flask_app\\virtualenv\\src\\flask-restless\flask_restless\views\base.py", line 1402, in get_all_inclusions
    to_include = set(chain(map(self.resources_to_include, instances)))

### instances is a BaseQuery object
### str(instances) is: 
'SELECT dbo.util_tap.date_created AS dbo_util_tap_date_created, dbo.util_tap.date_modified AS dbo_util_tap_date_modified, dbo.util_tap.created_by AS dbo_util_tap_created_by, dbo.util_tap.modified_by AS dbo_util_tap_modified_by, dbo.util_tap.id AS dbo_util_tap_id, dbo.util_tap.parcelid AS dbo_util_tap_parcelid, dbo.util_tap.status AS dbo_util_tap_status, dbo.util_tap.street_add AS dbo_util_tap_street_add, dbo.util_tap.prop_desc AS dbo_util_tap_prop_desc, dbo.util_tap.service_num AS dbo_util_tap_service_num, dbo.util_tap.meter_desc AS dbo_util_tap_meter_desc, dbo.util_tap.corp_desc AS dbo_util_tap_corp_desc, dbo.util_tap.curb_stop AS dbo_util_tap_curb_stop, dbo.util_tap.water_material AS dbo_util_tap_water_material, dbo.util_tap.water_date AS dbo_util_tap_water_date, dbo.util_tap.laid_by AS dbo_util_tap_laid_by, dbo.util_tap.re_laid_by AS dbo_util_tap_re_laid_by, dbo.util_tap.san_service AS dbo_util_tap_san_service, dbo.util_tap.san_laid AS dbo_util_tap_san_laid, dbo.util_tap.san_material AS dbo_util_tap_san_material, dbo.util_tap.san_date AS dbo_util_tap_san_date, dbo.util_tap.remarks AS dbo_util_tap_remarks, dbo.util_tap.file_url AS dbo_util_tap_file_url \nFROM dbo.util_tap ORDER BY dbo.util_tap.id ASC

  File "C:\\www\\flask_app\\virtualenv\\lib\\site-packages\sqlalchemy\orm\loading.py", line 90, in instances
    util.raise_from_cause(err)
  File "C:\\www\\flask_app\\virtualenv\\lib\\site-packages\sqlalchemy\util\compat.py", line 202, in raise_from_cause
    reraise(type(exception), exception, tb=exc_tb, cause=cause)
  File "C:\\www\\flask_app\\virtualenv\\lib\\site-packages\sqlalchemy\orm\loading.py", line 75, in instances
    rows = [proc(row) for row in fetch]
  File "C:\\www\\flask_app\\virtualenv\\lib\\site-packages\sqlalchemy\orm\loading.py", line 437, in _instance
    loaded_instance, populate_existing, populators)
  File "C:\\www\\flask_app\\virtualenv\\lib\\site-packages\sqlalchemy\orm\loading.py", line 498, in _populate_full
    dict_[key] = getter(row)
  File "C:\\www\\flask_app\\virtualenv\\lib\\site-packages\sqlalchemy\engine\result.py", line 93, in __getitem__
    return processor(self._row[index])

### self is <broken repr (TypeError: must be string or buffer, not datetime.datetime)>

### self.row is (datetime.datetime(2014, 11, 17, 0, 0), datetime.datetime(2014, 11, 17, 0, 0), u'pschulz', u'pschulz', 1259, u'1836228001', None, u'2100 GRANT ST - GOODWILL', u'BLOCK 1 LOT 2 REINEKES-1ST ADD', 7289, None, None, u'IN PARKING LOT 49\' S. OF BLDG & 69\'3" SW OF SE CORNER OF BLDG TO 6" VALVE, 1" VALVE 2\' N. & 2\' W. OF 6" VALVE', u'ST SECT-6" DUCTILE                  YD SEC-1" BLUE POLY W/TRACER', datetime.datetime(2014, 11, 7, 0, 0), u'MN UTILITIES & EXCAVATING -10/7/2014', None, u"NOT SAME TRENCH AS WATER, SEWER DEPTH-8', WATERMAIN DEPTH 7'", u'MN UTILITIES & EXCAVATING -10/7/2014', u'ST SEC-                                                          YD SEC-4" 3034', datetime.datetime(2014, 11, 7, 0, 0), u'BLDG HAD EXISTING SEWER INTO PROPERTY AND WAS EXTENDED TO NEW BLDG PAD FROM PREVIOUS BLDG LOCATION.\r\nSEE BACK OF CARD FOR DRAWING', u'/gis/utilities/static/uploads/tap/1259.pdf')

  File "C:\\www\\flask_app\\virtualenv\\lib\\site-packages\sqlalchemy\processors.py", line 85, in process
    return decoder(value, errors)[0]
  File "C:\Python27\ArcGISx6410.4\lib\encodings\utf_8.py", line 16, in decode
    return codecs.utf_8_decode(input, errors, True)
TypeError: must be string or buffer, not datetime.datetime

下面是相关的orm模型:

^{pr2}$

以下是我的数据库模式:

db schema


Tags: inpyappflaskvirtualenvlibpackagesas
1条回答
网友
1楼 · 发布于 2024-05-23 14:10:24

好吧,这是显而易见的…又一次。我在python模型中设置了一个String类型的列,但是在sqlserver中它被设置为datetime类型,这导致了这个问题。在

相关问题 更多 >