Some time between yesterday and today you have switched python interpreters 
between 2.7 and 3.6. Yesterday your errors were originating from modules 
located in "/Users/ihf/anaconda2/lib/python2.7/", today they seem to be 
coming from "~/anaconda2/lib/python3.6/". To be honest, it's better if you 
are using python 3.x as 2.7 goes end of life in only a few short months. 
This would explain why you had to reinstall pymysql as you are now working 
in a totally different environment.

The last error you've shown originates from the database layer. What 
version of mysql are you using and might that have changed along with your 
environment? utf8mb4 was introduced in 5.5.3, read more here: 
https://stackoverflow.com/questions/21911733/error-1115-42000-unknown-character-set-utf8mb4
.

On Friday, 23 August 2019 11:05:14 UTC+10, Ira Fuchs wrote:
>
> OK, I made a few changes/corrections to the Class definitions:
>
> class Contact(Base):
>     __tablename__ = "civicrm_contact"
>     id = Column(Integer, primary_key=True)
>     first_name = Column(String(64, u'utf8_unicode_ci'), index=True)
>     middle_name = Column(String(64, u'utf8_unicode_ci'))
>     last_name = Column(String(64, u'utf8_unicode_ci'), index=True)
>     display_name = Column(String(128, u'utf8_unicode_ci'))
>                           
> class Contribution(Base):
>     __tablename__ = 'civicrm_contribution'
>
>     id = Column(INTEGER, primary_key=True, comment=u'Contribution ID')
>     contact_id = Column(ForeignKey(u'civicrm_contact.id', 
> ondelete=u'CASCADE'), nullable=False, index=True)
>     financial_type_id = Column(ForeignKey(u'civicrm_financial_type.id'), 
> index=True)
>     contribution_page_id = Column(ForeignKey(u'
> civicrm_contribution_page.id', ondelete=u'SET NULL'), index=True)
>     payment_instrument_id = Column(INTEGER, index=True, comment=u'FK to 
> Payment Instrument')
>     receive_date = Column(DateTime, index=True, comment=u'when was gift 
> received')
>     non_deductible_amount = Column(DECIMAL(20, 2), 
> server_default=text("'0.00'"))
>     total_amount = Column(DECIMAL(20, 2), nullable=False)
>     fee_amount = Column(DECIMAL(20, 2), comment=u'actual processor fee if 
> known - may be 0.')
>     net_amount = Column(DECIMAL(20, 2))
>     trxn_id = Column(String(255, u'utf8_unicode_ci'), unique=True)
>     invoice_id = Column(String(255, u'utf8_unicode_ci'))
>     currency = Column(String(3, u'utf8_unicode_ci'))
>     cancel_date = Column(DateTime, comment=u'when was gift cancelled')
>     cancel_reason = Column(Text(collation=u'utf8_unicode_ci'))
>     receipt_date = Column(DateTime)
>     thankyou_date = Column(DateTime, comment=u'when (if) was donor 
> thanked')
>     source = Column(String(255, u'utf8_unicode_ci'), index=True, 
> comment=u'Origin of this Contribution.')
>     amount_level = Column(Text(collation=u'utf8_unicode_ci'))
>     contribution_recur_id = Column(ForeignKey(u'
> civicrm_contribution_recur.id', ondelete=u'SET NULL'), index=True)
>     is_test = Column(Integer, server_default=text("'0'"))
>     is_pay_later = Column(Integer, server_default=text("'0'"))
>     contribution_status_id = Column(INTEGER, index=True)
>     address_id = Column(ForeignKey(u'civicrm_address.id', ondelete=u'SET 
> NULL'), index=True)
>     check_number = Column(String(255, u'utf8_unicode_ci'))
>     campaign_id = Column(ForeignKey(u'civicrm_campaign.id', 
> ondelete=u'SET NULL'), index=True)
>     tax_amount = Column(DECIMAL(20, 2), comment=u'Total tax amount of this 
> contribution.')
>     creditnote_id = Column(String(255, u'utf8_unicode_ci'), index=True)
>     revenue_recognition_date = Column(DateTime, comment=u'Stores the date 
> when revenue should be recognized.')
>     invoice_number = Column(String(255, u'utf8_unicode_ci'), 
> comment=u'Human readable invoice number')
>
>     address = relationship(u'CivicrmAddress')
>     contact = relationship(u'CivicrmContact')
> class Address(Base):
>     __tablename__ = "civicrm_address"
>     id = Column(Integer, primary_key=True)
>     contact_id = Column(ForeignKey(u'civicrm_contact.id', 
> ondelete=u'CASCADE'), index=True)
>     street_address = Column(String(96, u'utf8_unicode_ci'))
>     city = Column(String(64, u'utf8_unicode_ci'))
>     postalcode = Column(String(64, u'utf8_unicode_ci'))
>     state_province_id = Column(String(64))
>     country_id = Column(ForeignKey(u'civicrm_country.id', ondelete=u'SET 
> NULL'))
> class Country(Base):
>     __tablename__ = "civicrm_country"
>     id = Column(Integer, primary_key=True)
>     name = Column(String(64, u'utf8_unicode_ci'))
> class State(Base):
>     __tablename__ = "civicrm_state_province"
>     id = Column(Integer, primary_key=True)
>     name = Column(String(64, u'utf8_unicode_ci'))
>     abbreviation = Column(String(4, u'utf8_unicode_ci'))
>     country_id = Column(ForeignKey(u'civicrm_country.id'))
> class Entity_Tag(Base):
>     __tablename__ = "civicrm_entity_tag"
>     id = Column(INTEGER, primary_key=True)
>     entity_id = Column(INTEGER, nullable=False, index=True)
>     tag_id = Column(ForeignKey(u'civicrm_tag.id', ondelete=u'CASCADE'))
>
> then I created a session and ran your query (with one or two corrections:
>
>     s = Session()
>     subquery = (
>         s.query(Contact.display_name)
>         .filter(
>             Contribution.receive_date > datetime.date(2005, 7, 1),
>             Contribution.contact_id == Contact.id,
>             Contact.id == Entity_Tag.entity_id,
>             Entity_Tag.tag_id == 6,
>         )
>         .subquery()
>     )
>     result = (
>         s.query(
>             Contact.last_name,
>             Contact.first_name,
>             Address.street_address,
>             Address.city,
>             Address.postalcode,
>             State.name,
>             Country.name.label("country"),
>         )
>         .filter(
>             Contact.id == Entity_Tag.entity_id,
>             Entity_Tag.tag_id == 6,
>             Contact.id == Address.contact_id,
>             Address.state_province_id == State.id,
>             Address.country_id == Country.id,
>             Contact.display_name.notin_(subquery),
>         )
>         .distinct()
>         .all()
>     )
>
> and the result is the same error as when I just try to execute an SQL 
> statement without using ORM(I'm note including the entire traceback unless 
> you need it):
>
> InternalError: (pymysql.err.InternalError) (1115, "Unknown character set: 
> 'utf8mb4'")
>
> Since this worked before, all I can think is that I somehow updated or 
> changed pymysql and the result is this error.
>
>
>
>
>
>

-- 
SQLAlchemy - 
The Python SQL Toolkit and Object Relational Mapper

http://www.sqlalchemy.org/

To post example code, please provide an MCVE: Minimal, Complete, and Verifiable 
Example.  See  http://stackoverflow.com/help/mcve for a full description.
--- 
You received this message because you are subscribed to the Google Groups 
"sqlalchemy" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to sqlalchemy+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/sqlalchemy/df9aa766-90d3-440b-8b48-18bfc47f568f%40googlegroups.com.

Reply via email to