我们从Python开源项目中,提取了以下50个代码示例,用于说明如何使用sqlalchemy.Numeric()。
def upgrade(): ### commands auto generated by Alembic - please adjust! ### op.create_table('restaurants_restaurant', sa.Column('id', sa.Integer(), nullable=False), sa.Column('name', sa.String(length=250), nullable=False), sa.PrimaryKeyConstraint('id') ) op.create_table('restaurants_menuitem', sa.Column('id', sa.Integer(), nullable=False), sa.Column('name', sa.String(length=80), nullable=False), sa.Column('description', sa.Text(), nullable=True), sa.Column('price', sa.Numeric(precision=2), nullable=False), sa.Column('course', sa.String(length=250), nullable=True), sa.Column('restaurant_id', sa.Integer(), nullable=True), sa.ForeignKeyConstraint(['restaurant_id'], ['restaurants_restaurant.id'], ), sa.PrimaryKeyConstraint('id') ) ### end Alembic commands ###
def upgrade(): # ### commands auto generated by Alembic - please adjust! ### op.create_table('bit_facebook_daily_ad_insights_impression_device', sa.Column('id', sa.Integer(), nullable=False), sa.Column('account_id', sa.String(length=255), nullable=True), sa.Column('campaign_id', sa.String(length=255), nullable=True), sa.Column('adset_id', sa.String(length=255), nullable=True), sa.Column('campaign_name', sa.String(length=255), nullable=True), sa.Column('spend', sa.Numeric(), nullable=True), sa.Column('cost_per_unique_click', sa.Numeric(), nullable=True), sa.Column('unique_clicks', sa.Integer(), nullable=True), sa.Column('unique_impressions', sa.Integer(), nullable=True), sa.Column('unique_social_clicks', sa.Integer(), nullable=True), sa.Column('unique_social_impressions', sa.Integer(), nullable=True), sa.Column('website_clicks', sa.Integer(), nullable=True), sa.Column('date_start', sa.DateTime(), nullable=True), sa.Column('date_stop', sa.DateTime(), nullable=True), sa.Column('impression_device', sa.String(length=255), nullable=True), sa.Column('ad_id', sa.Integer(), nullable=True), sa.ForeignKeyConstraint(['ad_id'], ['bit_facebook_ad.id'], ), sa.PrimaryKeyConstraint('id') ) op.create_index(op.f('ix_bit_facebook_daily_ad_insights_impression_device_impression_device'), 'bit_facebook_daily_ad_insights_impression_device', ['impression_device'], unique=False) # ### end Alembic commands ###
def test_fancy_coltypes(self): Table( 'simple_items', self.metadata, Column('enum', ENUM('A', 'B', name='blah')), Column('bool', BOOLEAN), Column('number', NUMERIC(10, asdecimal=False)), ) assert self.generate_code() == """\ # coding: utf-8 from sqlalchemy import Boolean, Column, Enum, MetaData, Numeric, Table metadata = MetaData() t_simple_items = Table( 'simple_items', metadata, Column('enum', Enum('A', 'B', name='blah')), Column('bool', Boolean), Column('number', Numeric(10, asdecimal=False)) ) """
def upgrade(): op.create_table( 'applications', sa.Column('id', sa.Integer, primary_key=True, autoincrement=True), sa.Column('appeui', sa.Numeric, nullable=False, unique=True), sa.Column('name', sa.String, nullable=True), sa.Column('domain', sa.String, nullable=True), sa.Column('appnonce', sa.Integer, nullable=False), sa.Column('appkey', sa.Numeric, nullable=False), sa.Column('fport', sa.Integer, nullable=False), sa.Column('modname', sa.String, nullable=False), sa.Column('proto', sa.String, nullable=False), sa.Column('listen', sa.String, nullable=False), sa.Column('port', sa.Integer, nullable=False), sa.Column('created', sa.DateTime(timezone=True), nullable=False), sa.Column('updated', sa.DateTime(timezone=True), nullable=False), )
def upgrade(): op.create_table( 'gateways', sa.Column('id', sa.Integer, primary_key=True, autoincrement=True), sa.Column('host', INET, nullable=False, unique=True), sa.Column('name', sa.String, nullable=True), sa.Column('enabled', sa.Boolean, nullable=False, default=True), sa.Column('eui', sa.Numeric, nullable=False, unique=True), sa.Column('power', sa.Integer, nullable=False), sa.Column('port', sa.String, nullable=True), sa.Column('latitude', sa.Float, nullable=True), sa.Column('longitude', sa.Float, nullable=True), sa.Column('created', sa.DateTime(timezone=True), nullable=False), sa.Column('updated', sa.DateTime(timezone=True), nullable=False), ) op.add_column('devices', sa.Column('devnonce', sa.dialects.postgresql.ARRAY(sa.Integer())))
def upgrade(): op.create_table( 'devices', sa.Column('id', sa.Integer, primary_key=True), sa.Column('deveui', sa.Numeric, nullable=True), sa.Column('devaddr', sa.Integer, nullable=False), sa.Column('devclass', sa.String(length=1), nullable=False), sa.Column('appeui', sa.Numeric, nullable=False), sa.Column('nwkskey', sa.Numeric, nullable=False), sa.Column('appskey', sa.Numeric, nullable=False), sa.Column('tx_chan', sa.Integer, nullable=True), sa.Column('tx_datr', sa.String, nullable=True), sa.Column('gw_addr', sa.String, nullable=True), sa.Column('time', sa.DateTime(timezone=True), nullable=True), sa.Column('tmst', sa.Numeric, nullable=True), sa.Column('fcntup', sa.Integer, server_default="0", nullable=False), sa.Column('fcntdown', sa.Integer, server_default="0", nullable=False), )
def get_test_model(): global _test_model if _test_model: return _test_model class TestModel(Base): """A sample SQLAlchemy model to demostrate db conflicts. """ __tablename__ = "test_model" #: Running counter used in foreign key references id = Column(Integer, primary_key=True) #: The total balance of this wallet in the minimum unit of cryptocurrency #: NOTE: accuracy checked for Bitcoin only balance = Column(Numeric(21, 8)) _test_model = TestModel return _test_model
def upgrade(): op.create_table( 'ad', sa.Column('id', sa.Integer(), nullable=False), sa.Column('asin', sa.String(20), nullable=False), sa.Column('title', sa.String(128), nullable=False), sa.Column('url', sa.String(1024), nullable=False), sa.Column('description', sa.String(256), nullable=False), sa.Column('created_at', sa.DateTime(), nullable=True), sa.PrimaryKeyConstraint('id'), sa.UniqueConstraint('asin', name='ux_ad_asin'), ) op.create_table( 'link_ad', sa.Column('id', sa.Integer(), nullable=False), sa.Column('issue_id', sa.Integer(), nullable=False), sa.Column('link_id', sa.Integer(), nullable=False), sa.Column('ad_id', sa.Integer(), nullable=False), sa.Column('weight', sa.Numeric(5, 2), nullable=False, server_default='0'), sa.Column('created_at', sa.DateTime(), nullable=True), sa.PrimaryKeyConstraint('id'), sa.UniqueConstraint('link_id', 'ad_id', name='ux_link_ad'), ) op.create_index('ix_link_weight', 'link_ad', ['link_id', 'weight'], unique=False) op.create_index('ix_issue_weight', 'link_ad', ['issue_id', 'weight'], unique=False)
def upgrade(): op.create_table('solution', sa.Column('created', sa.DateTime(), nullable=False), sa.Column('updated', sa.DateTime(), nullable=False), sa.Column('id', sa.Integer(), nullable=False), sa.Column('problem_id', sa.Integer(), nullable=False), sa.Column('programming_language_name', sa.String(length=20), nullable=False), sa.Column('testing_mode', sa.Enum('one', 'first_fail', 'full', name='testingmodes'), nullable=False), sa.Column('state', sa.Enum('new', 'reserved', 'received', 'tested', 'rejected', name='states'), nullable=False), sa.Column('status', sqlalchemy_utils.types.scalar_list.ScalarListType(), nullable=False), sa.Column('scored_points', sa.Numeric(precision=3), nullable=False), sa.Column('source_code_seaweed_id', sa.String(length=255), nullable=False), sa.Column('testing_report_seaweed_id', sa.String(length=255), nullable=False), sa.Column('creator_id', sa.Integer(), nullable=False), sa.ForeignKeyConstraint(['creator_id'], ['user.id'], ), sa.ForeignKeyConstraint(['problem_id'], ['problem.id'], ), sa.ForeignKeyConstraint(['programming_language_name'], ['programming_language.name'], ), sa.PrimaryKeyConstraint('id') )
def upgrade(): ### commands auto generated by Alembic - please adjust! ### op.create_table('pending_ride', sa.Column('id', sa.Integer(), nullable=False), sa.Column('uid', sa.String(), nullable=True), sa.Column('user_integration_id', sa.Integer(), nullable=False), sa.Column('start_coord', postgresql.JSON(), nullable=True), sa.Column('end_coord', postgresql.JSON(), nullable=True), sa.Column('fare', sa.Numeric(), nullable=True), sa.Column('meta', postgresql.JSON(), nullable=True), sa.Column('status', sa.Integer(), nullable=False), sa.Column('created_at', sa.DateTime(), nullable=True), sa.Column('is_destroyed', sa.Boolean(), server_default='f', nullable=True), sa.PrimaryKeyConstraint('id') ) op.create_index(op.f('ix_pending_ride_uid'), 'pending_ride', ['uid'], unique=False) ### end Alembic commands ###
def compare_server_default(self, inspector_column, metadata_column, rendered_metadata_default, rendered_inspector_default): # don't do defaults for SERIAL columns if metadata_column.primary_key and \ metadata_column is metadata_column.table._autoincrement_column: return False conn_col_default = rendered_inspector_default if None in (conn_col_default, rendered_metadata_default): return conn_col_default != rendered_metadata_default if metadata_column.server_default is not None and \ isinstance(metadata_column.server_default.arg, compat.string_types) and \ not re.match(r"^'.+'$", rendered_metadata_default) and \ not isinstance(inspector_column.type, Numeric): # don't single quote if the column type is float/numeric, # otherwise a comparison such as SELECT 5 = '5.0' will fail rendered_metadata_default = re.sub( r"^u?'?|'?$", "'", rendered_metadata_default) return not self.connection.scalar( "SELECT %s = %s" % ( conn_col_default, rendered_metadata_default ) )
def upgrade(): # ### commands auto generated by Alembic - please adjust! ### op.add_column('bit_facebook_daily_ad_insights_impression_device', sa.Column('cost_per_mobile_app_installs', sa.Numeric(), nullable=True)) op.add_column('bit_facebook_daily_ad_insights_impression_device', sa.Column('cost_per_mobile_app_purchases', sa.Numeric(), nullable=True)) op.add_column('bit_facebook_daily_ad_insights_impression_device', sa.Column('mobile_app_installs', sa.Integer(), nullable=True)) op.add_column('bit_facebook_daily_ad_insights_impression_device', sa.Column('mobile_app_purchases', sa.Integer(), nullable=True)) op.add_column('bit_performance_report', sa.Column('cost_per_mobile_app_installs', sa.Numeric(), nullable=True)) op.add_column('bit_performance_report', sa.Column('cost_per_mobile_app_purchases', sa.Numeric(), nullable=True)) op.add_column('bit_performance_report', sa.Column('mobile_app_installs', sa.Integer(), nullable=True)) op.add_column('bit_performance_report', sa.Column('mobile_app_purchases', sa.Integer(), nullable=True)) # ### end Alembic commands ###
def upgrade(): # ### commands auto generated by Alembic - please adjust! ### op.create_table('bit_performance_report', sa.Column('id', sa.Integer(), nullable=False), sa.Column('date', sa.DateTime(), nullable=True), sa.Column('year', sa.Integer(), nullable=True), sa.Column('month', sa.Integer(), nullable=True), sa.Column('day', sa.Integer(), nullable=True), sa.Column('name', sa.String(length=250), nullable=True), sa.Column('campaign_source', sa.String(length=250), nullable=True), sa.Column('campaign_name', sa.String(length=250), nullable=True), sa.Column('campaign_id', sa.String(length=250), nullable=True), sa.Column('clicks', sa.Integer(), nullable=True), sa.Column('clicks_unique', sa.Integer(), nullable=True), sa.Column('impressions', sa.Integer(), nullable=True), sa.Column('conversions', sa.Integer(), nullable=True), sa.Column('cost', sa.Numeric(precision=17, scale=5), nullable=True), sa.Column('breakdowns', postgresql.HSTORE(text_type=sa.Text()), nullable=True), sa.Column('measurements', postgresql.HSTORE(text_type=sa.Text()), nullable=True), sa.PrimaryKeyConstraint('id') ) op.create_index(op.f('ix_bit_performance_report_breakdowns'), 'bit_performance_report', ['breakdowns'], unique=False) op.create_index(op.f('ix_bit_performance_report_campaign_id'), 'bit_performance_report', ['campaign_id'], unique=False) op.create_index(op.f('ix_bit_performance_report_campaign_name'), 'bit_performance_report', ['campaign_name'], unique=False) op.create_index(op.f('ix_bit_performance_report_campaign_source'), 'bit_performance_report', ['campaign_source'], unique=False) op.create_index(op.f('ix_bit_performance_report_date'), 'bit_performance_report', ['date'], unique=False) op.create_index(op.f('ix_bit_performance_report_day'), 'bit_performance_report', ['day'], unique=False) op.create_index(op.f('ix_bit_performance_report_month'), 'bit_performance_report', ['month'], unique=False) op.create_index(op.f('ix_bit_performance_report_name'), 'bit_performance_report', ['name'], unique=False) op.create_index(op.f('ix_bit_performance_report_year'), 'bit_performance_report', ['year'], unique=False) # ### end Alembic commands ###
def upgrade(): # ### commands auto generated by Alembic - please adjust! ### op.add_column('bit_facebook_daily_ad_insights_impression_device', sa.Column('cost', sa.Numeric(), nullable=True)) # ### end Alembic commands ###
def upgrade(): # ### commands auto generated by Alembic - please adjust! ### op.create_table('bit_adwords_campaign_performance_report', sa.Column('id', sa.Integer(), nullable=False), sa.Column('campaign_name', sa.String(length=255), nullable=True), sa.Column('cost', sa.Numeric(), nullable=True), sa.Column('clicks', sa.Integer(), nullable=True), sa.Column('impression_device', sa.String(length=255), nullable=True), sa.Column('impressions', sa.Integer(), nullable=True), sa.Column('conversions', sa.Integer(), nullable=True), sa.Column('date', sa.DateTime(), nullable=True), sa.PrimaryKeyConstraint('id') ) op.create_index(op.f('ix_bit_adwords_campaign_performance_report_impression_device'), 'bit_adwords_campaign_performance_report', ['impression_device'], unique=False) # ### end Alembic commands ###
def upgrade(): # ### commands auto generated by Alembic - please adjust! ### op.create_table( 'individual_importances', sa.Column('model_id', sa.Integer(), nullable=False), sa.Column('entity_id', sa.BigInteger(), nullable=False), sa.Column('as_of_date', sa.DateTime(), nullable=False), sa.Column('feature', sa.String(), nullable=False), sa.Column('method', sa.String(), nullable=False), sa.Column('importance_score', sa.Text(), nullable=True), sa.ForeignKeyConstraint(['model_id'], ['results.models.model_id'], ), sa.PrimaryKeyConstraint( 'model_id', 'entity_id', 'as_of_date', 'feature', 'method', ), schema='results' ) op.create_table( 'list_predictions', sa.Column('model_id', sa.Integer(), nullable=False), sa.Column('entity_id', sa.BigInteger(), nullable=False), sa.Column('as_of_date', sa.DateTime(), nullable=False), sa.Column('score', sa.Numeric(), nullable=True), sa.Column('rank_abs', sa.Integer(), nullable=True), sa.Column('rank_pct', sa.Float(), nullable=True), sa.Column('matrix_uuid', sa.Text(), nullable=True), sa.Column('test_label_window', sa.Interval(), nullable=True), sa.ForeignKeyConstraint(['model_id'], ['results.models.model_id'], ), sa.PrimaryKeyConstraint('model_id', 'entity_id', 'as_of_date'), schema='results' ) # ### end Alembic commands ###
def compare_server_default(self, inspector_column, metadata_column, rendered_metadata_default, rendered_inspector_default): # don't do defaults for SERIAL columns if metadata_column.primary_key and \ metadata_column is metadata_column.table._autoincrement_column: return False conn_col_default = rendered_inspector_default defaults_equal = conn_col_default == rendered_metadata_default if defaults_equal: return False if None in (conn_col_default, rendered_metadata_default): return not defaults_equal if metadata_column.server_default is not None and \ isinstance(metadata_column.server_default.arg, compat.string_types) and \ not re.match(r"^'.+'$", rendered_metadata_default) and \ not isinstance(inspector_column.type, Numeric): # don't single quote if the column type is float/numeric, # otherwise a comparison such as SELECT 5 = '5.0' will fail rendered_metadata_default = re.sub( r"^u?'?|'?$", "'", rendered_metadata_default) return not self.connection.scalar( "SELECT %s = %s" % ( conn_col_default, rendered_metadata_default ) )
def compare_server_default(self, inspector_column, metadata_column, rendered_metadata_default, rendered_inspector_default): # don't do defaults for SERIAL columns if metadata_column.primary_key and \ metadata_column is metadata_column.table._autoincrement_column: return False conn_col_default = rendered_inspector_default if None in (conn_col_default, rendered_metadata_default): return conn_col_default != rendered_metadata_default if metadata_column.server_default is not None and \ isinstance(metadata_column.server_default.arg, compat.string_types) and \ not re.match(r"^'.+'$", rendered_metadata_default) and \ not isinstance(inspector_column.type, Numeric): # don't single quote if the column type is float/numeric, # otherwise a comparison such as SELECT 5 = '5.0' will fail rendered_metadata_default = "'%s'" % rendered_metadata_default return not self.connection.scalar( "SELECT %s = %s" % ( conn_col_default, rendered_metadata_default ) )
def get_table(self, table_name, schema=None): schema = schema or self.meta.schema if schema: tbl = self.meta.tables.get('.'.join([schema, table_name])) else: tbl = self.meta.tables.get(table_name) # Avoid casting double-precision floats into decimals from sqlalchemy import Numeric for column in tbl.columns: if isinstance(column.type, Numeric): column.type.asdecimal = False return tbl
def upgrade(): op.add_column( 'accounts', sa.Column( 'apr', sa.Numeric(precision=5, scale=4), nullable=True ) ) op.add_column( 'accounts', sa.Column( 'prime_rate_margin', sa.Numeric(precision=5, scale=4), nullable=True ) ) op.add_column( 'accounts', sa.Column( 'interest_class_name', sa.String(length=70), nullable=True ) ) op.add_column( 'accounts', sa.Column( 'min_payment_class_name', sa.String(length=70), nullable=True ) )
def upgrade(): op.create_table( 'projects', sa.Column('id', sa.Integer(), nullable=False), sa.Column('name', sa.String(length=40), nullable=True), sa.Column('notes', sa.String(length=254), nullable=True), sa.Column('is_active', sa.Boolean(), nullable=True), sa.PrimaryKeyConstraint('id', name=op.f('pk_projects')), mysql_engine='InnoDB' ) op.create_table( 'bom_items', sa.Column('id', sa.Integer(), nullable=False), sa.Column('project_id', sa.Integer(), nullable=False), sa.Column('name', sa.String(length=254), nullable=True), sa.Column('notes', sa.String(length=254), nullable=True), sa.Column('quantity', sa.Integer(), nullable=True), sa.Column( 'unit_cost', sa.Numeric(precision=10, scale=4), nullable=True ), sa.Column('url', sa.String(length=254), nullable=True), sa.Column('is_active', sa.Boolean(), nullable=True), sa.ForeignKeyConstraint( ['project_id'], ['projects.id'], name=op.f('fk_bom_items_project_id_projects') ), sa.PrimaryKeyConstraint('id', name=op.f('pk_bom_items')), mysql_engine='InnoDB' )
def _repeated_value(type_): if isinstance(type_, ARRAY): if isinstance(type_.item_type, sa.Integer): return [0] elif isinstance(type_.item_type, sa.String): return [u'a'] elif isinstance(type_.item_type, sa.Numeric): return [Decimal('0')] else: raise TypeError('Unknown array item type') else: return u'a'
def _resolve_type(self, t, **kw): """ Resolve types for String, Numeric, Date/Time, etc. columns """ t = self.normalize_name(t) if t in ischema_names: #print(t,ischema_names[t]) t = ischema_names[t] if issubclass(t, sqltypes.String): return t(length=kw['length']/2 if kw['chartype']=='UNICODE' else kw['length'],\ charset=kw['chartype']) elif issubclass(t, sqltypes.Numeric): return t(precision=kw['prec'], scale=kw['scale']) elif issubclass(t, sqltypes.Time) or issubclass(t, sqltypes.DateTime): #Timezone tz=kw['fmt'][-1]=='Z' #Precision prec = kw['fmt'] #For some timestamps and dates, there is no precision, or indicatd in scale prec = prec[prec.index('(') + 1: prec.index(')')] if '(' in prec else 0 prec = kw['scale'] if prec=='F' else int(prec) #prec = int(prec[prec.index('(') + 1: prec.index(')')]) if '(' in prec else 0 return t(precision=prec,timezone=tz) elif issubclass(t, sqltypes.Interval): return t(day_precision=kw['prec'],second_precision=kw['scale']) else: return t() # For types like Integer, ByteInt return ischema_names[None]
def upgrade(): ### commands auto generated by Alembic - please adjust! ### op.add_column('billing', sa.Column('compute_cost', sa.Numeric(), nullable=True)) op.add_column('billing', sa.Column('storage_cost', sa.Numeric(), nullable=True)) op.drop_column('billing', 'cost') ### end Alembic commands ###
def upgrade(): ### commands auto generated by Alembic - please adjust! ### op.create_table('billing', sa.Column('id', sa.Integer(), nullable=False), sa.Column('cost', sa.Numeric(), nullable=True), sa.Column('project', sa.Text(), nullable=True), sa.Column('start_date', sa.DateTime(), nullable=True), sa.Column('end_date', sa.DateTime(), nullable=True), sa.Column('created_date', sa.DateTime(), nullable=True), sa.Column('closed_out', sa.Boolean(), nullable=False), sa.PrimaryKeyConstraint('id'), sa.UniqueConstraint('project', 'start_date', name='unique_prj_start') ) ### end Alembic commands ###
def upgrade(): connection = op.get_bind() # Make sure that every value is already an Integer for user in connection.execute(user_table.select()): connection.execute( user_table.update().where( user_table.c.email == user.email ).values( spam_threshold=int(user.spam_threshold) ) ) # Migrate the table with op.batch_alter_table('user') as batch: batch.alter_column( 'spam_threshold', existing_type=sa.Numeric(), type_=sa.Integer())
def downgrade(): # Migrate the table with op.batch_alter_table('user') as batch: batch.alter_column( 'spam_threshold', existing_type=sa.Integer(), type_=sa.Numeric())
def upgrade(): with op.batch_alter_table('user') as batch: batch.drop_column('spam_threshold') batch.add_column(sa.Column('spam_threshold', sa.Numeric(), default=10.0))
def __init__(self, expression, type_): """Produce a ``CAST`` expression. :func:`.cast` returns an instance of :class:`.Cast`. E.g.:: from sqlalchemy import cast, Numeric stmt = select([ cast(product_table.c.unit_price, Numeric(10, 4)) ]) The above statement will produce SQL resembling:: SELECT CAST(unit_price AS NUMERIC(10, 4)) FROM product The :func:`.cast` function performs two distinct functions when used. The first is that it renders the ``CAST`` expression within the resulting SQL string. The second is that it associates the given type (e.g. :class:`.TypeEngine` class or instance) with the column expression on the Python side, which means the expression will take on the expression operator behavior associated with that type, as well as the bound-value handling and result-row-handling behavior of the type. .. versionchanged:: 0.9.0 :func:`.cast` now applies the given type to the expression such that it takes effect on the bound-value, e.g. the Python-to-database direction, in addition to the result handling, e.g. database-to-Python, direction. An alternative to :func:`.cast` is the :func:`.type_coerce` function. This function performs the second task of associating an expression with a specific type, but does not render the ``CAST`` expression in SQL. :param expression: A SQL expression, such as a :class:`.ColumnElement` expression or a Python string which will be coerced into a bound literal value. :param type_: A :class:`.TypeEngine` class or instance indicating the type to which the ``CAST`` should apply. .. seealso:: :func:`.type_coerce` - Python-side type coercion without emitting CAST. """ self.type = type_api.to_instance(type_) self.clause = _literal_as_binds(expression, type_=self.type) self.typeclause = TypeClause(self.type)
def upgrade(): # ### commands auto generated by Alembic - please adjust! ### op.create_table( 'vehicles', sa.Column('id', sa.Integer(), nullable=False), sa.Column('name', sa.String(length=254), nullable=True), sa.Column('is_active', sa.Boolean(), nullable=True), sa.PrimaryKeyConstraint('id', name=op.f('pk_vehicles')), mysql_engine='InnoDB' ) op.create_table( 'fuellog', sa.Column('id', sa.Integer(), nullable=False), sa.Column('date', sa.Date(), nullable=True), sa.Column('vehicle_id', sa.Integer(), nullable=True), sa.Column('odometer_miles', sa.Integer(), nullable=True), sa.Column('reported_miles', sa.SmallInteger(), nullable=True), sa.Column('calculated_miles', sa.SmallInteger(), nullable=True), sa.Column('level_before', sa.SmallInteger(), nullable=True), sa.Column('level_after', sa.SmallInteger(), nullable=True), sa.Column('fill_location', sa.String(length=254), nullable=True), sa.Column( 'cost_per_gallon', sa.Numeric(precision=10, scale=4), nullable=True ), sa.Column( 'total_cost', sa.Numeric(precision=10, scale=4), nullable=True ), sa.Column( 'gallons', sa.Numeric(precision=10, scale=4), nullable=True ), sa.Column( 'reported_mpg', sa.Numeric(precision=10, scale=4), nullable=True ), sa.Column( 'calculated_mpg', sa.Numeric(precision=10, scale=4), nullable=True ), sa.Column('notes', sa.String(length=254), nullable=True), sa.ForeignKeyConstraint( ['vehicle_id'], ['vehicles.id'], name=op.f('fk_fuellog_vehicle_id_vehicles') ), sa.PrimaryKeyConstraint('id', name=op.f('pk_fuellog')), mysql_engine='InnoDB' ) # ### end Alembic commands ###