Это мои коды
from sqlalchemy import create_engine
from sqlalchemy.ext.declarative import declarative_base
from datetime import datetime
from sqlalchemy import MetaData, Column, Integer, String, Boolean, Enum, Float, ForeignKey, DateTime
engine = create_engine('sqlite:///logfilesdb.db', echo=True)
df.to_sql("logfile", con=engine, if_exists='replace', index=False, dtype={
"IP": Integer,
"date": DateTime,
"time": DateTime,
"request_type": String(4),
"URL": String(50),
"status_code": Integer})
engine.execute("SELECT * FROM logfile").fetchall()
Тем не менее, дата и время в SqlAlChemy доставляют мне проблемы, так как я не могу успешно вставить их в БД.
Это мое сообщение об ошибке, которое я получил. Я не могу вызвать данные из SqlAlChemy, использующие для l oop.
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
~/opt/anaconda3/lib/python3.7/site-packages/sqlalchemy/engine/base.py in _execute_context(self, dialect, constructor, statement, parameters, *args)
1178
-> 1179 context = constructor(dialect, self, conn, *args)
1180 except BaseException as e:
~/opt/anaconda3/lib/python3.7/site-packages/sqlalchemy/engine/default.py in _init_compiled(cls, dialect, connection, dbapi_connection, compiled, parameters)
746 if key in processors:
--> 747 param.append(processors[key](compiled_params[key]))
748 else:
~/opt/anaconda3/lib/python3.7/site-packages/sqlalchemy/dialects/sqlite/base.py in process(value)
739 raise TypeError(
--> 740 "SQLite DateTime type only accepts Python "
741 "datetime and date objects as input."
TypeError: SQLite DateTime type only accepts Python datetime and date objects as input.
The above exception was the direct cause of the following exception:
StatementError Traceback (most recent call last)
<ipython-input-177-345b3630fd58> in <module>
11 "request_type": String(4),
12 "URL": String(50),
---> 13 "status_code": Integer})
14
15 engine.execute("SELECT * FROM logfile").fetchall()
~/opt/anaconda3/lib/python3.7/site-packages/pandas/core/generic.py in to_sql(self, name, con, schema, if_exists, index, index_label, chunksize, dtype, method)
2710 chunksize=chunksize,
2711 dtype=dtype,
-> 2712 method=method,
2713 )
2714
~/opt/anaconda3/lib/python3.7/site-packages/pandas/io/sql.py in to_sql(frame, name, con, schema, if_exists, index, index_label, chunksize, dtype, method)
516 chunksize=chunksize,
517 dtype=dtype,
--> 518 method=method,
519 )
520
~/opt/anaconda3/lib/python3.7/site-packages/pandas/io/sql.py in to_sql(self, frame, name, if_exists, index, index_label, schema, chunksize, dtype, method)
1318 )
1319 table.create()
-> 1320 table.insert(chunksize, method=method)
1321 if not name.isdigit() and not name.islower():
1322 # check for potentially case sensitivity issues (GH7815)
~/opt/anaconda3/lib/python3.7/site-packages/pandas/io/sql.py in insert(self, chunksize, method)
754
755 chunk_iter = zip(*[arr[start_i:end_i] for arr in data_list])
--> 756 exec_insert(conn, keys, chunk_iter)
757
758 def _query_iterator(
~/opt/anaconda3/lib/python3.7/site-packages/pandas/io/sql.py in _execute_insert(self, conn, keys, data_iter)
668 """
669 data = [dict(zip(keys, row)) for row in data_iter]
--> 670 conn.execute(self.table.insert(), data)
671
672 def _execute_insert_multi(self, conn, keys, data_iter):
~/opt/anaconda3/lib/python3.7/site-packages/sqlalchemy/engine/base.py in execute(self, object_, *multiparams, **params)
986 raise exc.ObjectNotExecutableError(object_)
987 else:
--> 988 return meth(self, multiparams, params)
989
990 def _execute_function(self, func, multiparams, params):
~/opt/anaconda3/lib/python3.7/site-packages/sqlalchemy/sql/elements.py in _execute_on_connection(self, connection, multiparams, params)
285 def _execute_on_connection(self, connection, multiparams, params):
286 if self.supports_execution:
--> 287 return connection._execute_clauseelement(self, multiparams, params)
288 else:
289 raise exc.ObjectNotExecutableError(self)
~/opt/anaconda3/lib/python3.7/site-packages/sqlalchemy/engine/base.py in _execute_clauseelement(self, elem, multiparams, params)
1105 distilled_params,
1106 compiled_sql,
-> 1107 distilled_params,
1108 )
1109 if self._has_events or self.engine._has_events:
~/opt/anaconda3/lib/python3.7/site-packages/sqlalchemy/engine/base.py in _execute_context(self, dialect, constructor, statement, parameters, *args)
1180 except BaseException as e:
1181 self._handle_dbapi_exception(
-> 1182 e, util.text_type(statement), parameters, None, None
1183 )
1184
~/opt/anaconda3/lib/python3.7/site-packages/sqlalchemy/engine/base.py in _handle_dbapi_exception(self, e, statement, parameters, cursor, context)
1471 util.raise_from_cause(newraise, exc_info)
1472 elif should_wrap:
-> 1473 util.raise_from_cause(sqlalchemy_exception, exc_info)
1474 else:
1475 util.reraise(*exc_info)
~/opt/anaconda3/lib/python3.7/site-packages/sqlalchemy/util/compat.py in raise_from_cause(exception, exc_info)
396 exc_type, exc_value, exc_tb = exc_info
397 cause = exc_value if exc_value is not exception else None
--> 398 reraise(type(exception), exception, tb=exc_tb, cause=cause)
399
400
~/opt/anaconda3/lib/python3.7/site-packages/sqlalchemy/util/compat.py in reraise(tp, value, tb, cause)
150 value.__cause__ = cause
151 if value.__traceback__ is not tb:
--> 152 raise value.with_traceback(tb)
153 raise value
154
~/opt/anaconda3/lib/python3.7/site-packages/sqlalchemy/engine/base.py in _execute_context(self, dialect, constructor, statement, parameters, *args)
1177 conn = self._revalidate_connection()
1178
-> 1179 context = constructor(dialect, self, conn, *args)
1180 except BaseException as e:
1181 self._handle_dbapi_exception(
~/opt/anaconda3/lib/python3.7/site-packages/sqlalchemy/engine/default.py in _init_compiled(cls, dialect, connection, dbapi_connection, compiled, parameters)
745 for key in positiontup:
746 if key in processors:
--> 747 param.append(processors[key](compiled_params[key]))
748 else:
749 param.append(compiled_params[key])
~/opt/anaconda3/lib/python3.7/site-packages/sqlalchemy/dialects/sqlite/base.py in process(value)
738 else:
739 raise TypeError(
--> 740 "SQLite DateTime type only accepts Python "
741 "datetime and date objects as input."
742 )
StatementError: (builtins.TypeError) SQLite DateTime type only accepts Python datetime and date objects as input.
[SQL: INSERT INTO logfile ("IP", date, time, "request type", "URL", "status code") VALUES (?, ?, ?, ?, ?, ?)]
[parameters: [{'IP': '10.128.2.1', 'date': '29/11/2017', 'time': '06:58:55', 'request type': 'GET', 'URL': 'login.php', 'status code': '200'}, {'IP': '10.128.2.1', 'date': '29/11/2017', 'time': '06:59:02', 'request type': 'POST', 'URL': 'process.php', 'status code': '302'}, {'IP': '10.128.2.1', 'date': '29/11/2017', 'time': '06:59:03', 'request type': 'GET', 'URL': 'home.php', 'status code': '200'}, {'IP': '10.131.2.1', 'date': '29/11/2017', 'time': '06:59:04', 'request type': 'GET', 'URL': 'js/vendor/moment.min.js', 'status code': '200'}, {'IP': '10.130.2.1', 'date': '29/11/2017', 'time': '06:59:06', 'request type': 'GET', 'URL': 'bootstrap-3.3.7/js/bootstrap.js', 'status code': '200'}, {'IP': '10.130.2.1', 'date': '29/11/2017', 'time': '06:59:19', 'request type': 'GET', 'URL': 'profile.php?user=bala', 'status code': '200'}, {'IP': '10.128.2.1', 'date': '29/11/2017', 'time': '06:59:19', 'request type': 'GET', 'URL': 'js/jquery.min.js', 'status code': '200'}, {'IP': '10.131.2.1', 'date': '29/11/2017', 'time': '06:59:19', 'request type': 'GET', 'URL': 'js/chart.min.js', 'status code': '200'} ... displaying 10 of 14927 total bound parameter sets ... {'IP': '10.130.2.1', 'date': '03/02/2018', 'time': '15:47:35', 'request type': 'GET', 'URL': 'allsubmission.php', 'status code': '200'}, {'IP': '10.130.2.1', 'date': '03/02/2018', 'time': '15:47:46', 'request type': 'GET', 'URL': 'home.php', 'status code': '200'}]]
Это пример того, как выглядит мой фрейм данных.
**IP date time request type URL status code**
0 10.128.2.1 29/11/2017 06:58:55 GET login.php 200
1 10.128.2.1 29/11/2017 06:59:02 POST process.php 302
2 10.128.2.1 29/11/2017 06:59:03 GET home.php 200
3 10.131.2.1 29/11/2017 06:59:04 GET js/vendor/moment.min.js 200
4 10.130.2.1 29/11/2017 06:59:06 GET bootstrap-3.3.7/js/bootstrap.js 200
5 10.130.2.1 29/11/2017 06:59:19 GET profile.php?user=bala 200
6 10.128.2.1 29/11/2017 06:59:19 GET js/jquery.min.js 200
7 10.131.2.1 29/11/2017 06:59:19 GET js/chart.min.js 200
8 10.131.2.1 29/11/2017 06:59:30 GET edit.php?name=bala 200
9 10.131.2.1 29/11/2017 06:59:37 GET logout.php 302
10 10.131.2.1 29/11/2017 06:59:37 GET login.php 200
Желаемый результат должен состоять в том, чтобы я мог просматривать информацию в БД с помощью запроса.