id-python / members

Python Indonesia community maps

Home Page:http://members.python.or.id

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

MySQL Support

edwinlunando opened this issue · comments

Failed to migrate on using MySQL as database backend. Ini string mysql

SQLALCHEMY_DATABASE_URI = "mysql+mysqldb://username:password@localhost/members"

Berikut tracenya

Traceback (most recent call last):
  File "manage.py", line 9, in <module>
    manager.run()
  File "/home/edwinlunando/.virtualenvs/members/local/lib/python2.7/site-packages/flask_script/__init__.py", line 412, in run
    result = self.handle(sys.argv[0], sys.argv[1:])
  File "/home/edwinlunando/.virtualenvs/members/local/lib/python2.7/site-packages/flask_script/__init__.py", line 383, in handle
    res = handle(*args, **config)
  File "/home/edwinlunando/.virtualenvs/members/local/lib/python2.7/site-packages/flask_script/commands.py", line 216, in __call__
    return self.run(*args, **kwargs)
  File "/home/edwinlunando/.virtualenvs/members/local/lib/python2.7/site-packages/flask_migrate/__init__.py", line 98, in upgrade
    command.upgrade(config, revision, sql = sql, tag = tag)
  File "/home/edwinlunando/.virtualenvs/members/local/lib/python2.7/site-packages/alembic/command.py", line 125, in upgrade
    script.run_env()
  File "/home/edwinlunando/.virtualenvs/members/local/lib/python2.7/site-packages/alembic/script.py", line 203, in run_env
    util.load_python_file(self.dir, 'env.py')
  File "/home/edwinlunando/.virtualenvs/members/local/lib/python2.7/site-packages/alembic/util.py", line 212, in load_python_file
    module = load_module_py(module_id, path)
  File "/home/edwinlunando/.virtualenvs/members/local/lib/python2.7/site-packages/alembic/compat.py", line 58, in load_module_py
    mod = imp.load_source(module_id, path, fp)
  File "/home/edwinlunando/Projects/members/users/migrations/env.py", line 72, in <module>
    run_migrations_online()
  File "/home/edwinlunando/Projects/members/users/migrations/env.py", line 65, in run_migrations_online
    context.run_migrations()
  File "<string>", line 7, in run_migrations
  File "/home/edwinlunando/.virtualenvs/members/local/lib/python2.7/site-packages/alembic/environment.py", line 688, in run_migrations
    self.get_context().run_migrations(**kw)
  File "/home/edwinlunando/.virtualenvs/members/local/lib/python2.7/site-packages/alembic/migration.py", line 258, in run_migrations
    change(**kw)
  File "/home/edwinlunando/Projects/members/users/migrations/versions/15e14062732d_create_users_table.py", line 29, in upgrade
    sa.Column("longitude", sa.Float),
  File "<string>", line 7, in create_table
  File "/home/edwinlunando/.virtualenvs/members/local/lib/python2.7/site-packages/alembic/operations.py", line 713, in create_table
    self._table(name, *columns, **kw)
  File "/home/edwinlunando/.virtualenvs/members/local/lib/python2.7/site-packages/alembic/ddl/impl.py", line 149, in create_table
    self._exec(schema.CreateTable(table))
  File "/home/edwinlunando/.virtualenvs/members/local/lib/python2.7/site-packages/alembic/ddl/impl.py", line 76, in _exec
    conn.execute(construct, *multiparams, **params)
  File "/home/edwinlunando/.virtualenvs/members/local/lib/python2.7/site-packages/sqlalchemy/engine/base.py", line 727, in execute
    return meth(self, multiparams, params)
  File "/home/edwinlunando/.virtualenvs/members/local/lib/python2.7/site-packages/sqlalchemy/sql/ddl.py", line 67, in _execute_on_connection
    return connection._execute_ddl(self, multiparams, params)
  File "/home/edwinlunando/.virtualenvs/members/local/lib/python2.7/site-packages/sqlalchemy/engine/base.py", line 781, in _execute_ddl
    compiled
  File "/home/edwinlunando/.virtualenvs/members/local/lib/python2.7/site-packages/sqlalchemy/engine/base.py", line 954, in _execute_context
    context)
  File "/home/edwinlunando/.virtualenvs/members/local/lib/python2.7/site-packages/sqlalchemy/engine/base.py", line 1116, in _handle_dbapi_exception
    exc_info
  File "/home/edwinlunando/.virtualenvs/members/local/lib/python2.7/site-packages/sqlalchemy/util/compat.py", line 189, in raise_from_cause
    reraise(type(exception), exception, tb=exc_tb)
  File "/home/edwinlunando/.virtualenvs/members/local/lib/python2.7/site-packages/sqlalchemy/engine/base.py", line 947, in _execute_context
    context)
  File "/home/edwinlunando/.virtualenvs/members/local/lib/python2.7/site-packages/sqlalchemy/engine/default.py", line 435, in do_execute
    cursor.execute(statement, parameters)
  File "/home/edwinlunando/.virtualenvs/members/local/lib/python2.7/site-packages/MySQLdb/cursors.py", line 205, in execute
    self.errorhandler(self, exc, value)
  File "/home/edwinlunando/.virtualenvs/members/local/lib/python2.7/site-packages/MySQLdb/connections.py", line 36, in defaulterrorhandler
    raise errorclass, errorvalue
sqlalchemy.exc.OperationalError: (OperationalError) (1067, "Invalid default value for 'date_added'") '\nCREATE TABLE users (\n\tid INTEGER NOT NULL AUTO_INCREMENT, \n\tguid VARCHAR(37) NOT NULL, \n\tname VARCHAR(32) NOT NULL, \n\temail VARCHAR(254) NOT NULL, \n\twebsite VARCHAR(255), \n\temail_updates BOOL, \n\tdate_added DATETIME DEFAULT CURRENT_TIMESTAMP, \n\tlatitude FLOAT, \n\tlongitude FLOAT, \n\tCONSTRAINT pk_users PRIMARY KEY (id), \n\tCONSTRAINT uq_users_guid UNIQUE (guid), \n\tCONSTRAINT ck_users_email_updates CHECK (email_updates IN (0, 1))\n)\n\n' ()

Permasalahannya itu, MySQL gak support CURRENT_TIMESTAMP buat default value tipe data DATETIME. Ini referensinya http://stackoverflow.com/questions/168736/how-do-you-set-a-default-value-for-a-mysql-datetime-column. Alternatif solusinya, ganti jadi struktur data TIMESTAMP. Gimana?

Updated. Failed on running tests.

StatementError: invalid literal for int() with base 10: 'true' (original cause: ValueError: invalid literal for int() with base 10: 'true') u'INSERT INTO users (guid, name, email, website, email_updates, latitude, longitude) VALUES (%s, %s, %s, %s, %s, %s, %s)' [{'website': 'http://www.ac.com', 'name': 'Akbar', 'email_updates': 'true', 'longitude': -13.03, 'latitude': 12.32, 'guid': '1fd87f8f-fca1-411d-bfb9-2bcc94cd7c98', 'email': 'test@gmail.com'}]

Easiest solution, change 'true' string literal on all test user into True boolean Python value.

Thanks @edwinlunando, I am closing this now as you already made the PR