Reputation: 1269
I am getting a weird error in my code.
Here is the snippet.
from sqlalchemy import *
import datetime
from config import *
from sqlalchemy.orm import sessionmaker
import logging
engine = create_engine(DB_CONNECTION_STRING)
metadata = MetaData(engine)
Session = sessionmaker(bind=engine)
def now():
return datetime.datetime.now()
Feeds = Table('feeds', metadata,
Column('id', Integer, primary_key=True),
Column('title', String(500)),
Column('summary', Text),
Column('link', String(200)),
Column('published_at', DateTime),
Column('created_at', DateTime),
Column('updated_at', DateTime),
Column('user_seen', DateTime),
Column('rss_link_id', ForeignKey('rss_links.id', ondelete="CASCADE"))
)
RssLinks = Table('rss_links', metadata,
Column('id', Integer, primary_key=True),
Column('link', String(200)),
Column('rss_link', String(200)),
Column('title', String(500)),
Column('status', String(100)),
Column('created_at', DateTime),
Column('updated_at', DateTime),
)
def insert_into_rss_links(link=link, rss_link=rss_link, title=title):
ins = RssLinks.insert()
ins.execute(link=link, rss_link=rss_link, title=title, status='VALID', created_at=now())
def insert_rss_links(site_link, _rss_links):
for rss_link in _rss_links:
insert_into_rss_links(link=site_link, rss_link=_rss_links['link'], title=_rss_links['title'])
if __name__ == '__main__':
metadata.create_all()
The error is
In [1]: import dbi
---------------------------------------------------------------------------
NameError Traceback (most recent call last)
<ipython-input-1-81964b779871> in <module>()
----> 1 import dbi
/home/asit/own/proj/dbi.py in <module>()
44
---> 45 def insert_into_rss_links(link=link, rss_link=rss_link, title=title):
46 ins = RssLinks.insert()
47 ins.execute(link=link, rss_link=rss_link, title=title, status='VALID', created_at=now())
NameError: name 'link' is not defined
Can somebody tell me, why is this happening ?
Upvotes: 0
Views: 76
Reputation: 1125368
You are giving your insert_into_rss_links()
arguments default values:
def insert_into_rss_links(link=link, rss_link=rss_link, title=title):
Each keyword=value
part must have a valid value
expression when the function is defined, but link
, rss_link
and title
are not.
Most likely, you didn't mean to give these defaults at all; just remove them:
def insert_into_rss_links(link, rss_link, title):
Upvotes: 2
Reputation: 122159
You are defining the function as if you were calling it:
def insert_into_rss_links(link=link, rss_link=rss_link, title=title):
At the time the function object is created, there is no link
to be the default value for the link
argument.
Upvotes: 2