Skip to content

Instantly share code, notes, and snippets.

@jdimatteo
Created September 12, 2022 21:48
Show Gist options
  • Save jdimatteo/c223668095392e629ca01aadada4171c to your computer and use it in GitHub Desktop.
Save jdimatteo/c223668095392e629ca01aadada4171c to your computer and use it in GitHub Desktop.
repeated struct example with python-bigquery-sqlalchemy
import sqlalchemy
import sqlalchemy.ext.declarative
import sqlalchemy_bigquery
import os
Base = sqlalchemy.ext.declarative.declarative_base()
class Foo2(Base):
__tablename__ = 'foo2'
zap = sqlalchemy.Column(sqlalchemy.String, primary_key=True)
blah = sqlalchemy.Column(
sqlalchemy.ARRAY(sqlalchemy.String),
)
yarg = sqlalchemy.Column(
sqlalchemy_bigquery.STRUCT(
a=sqlalchemy.String,
b=sqlalchemy.String,
),
)
yip = sqlalchemy.Column(
sqlalchemy.ARRAY(
sqlalchemy_bigquery.STRUCT(
x=sqlalchemy.String,
y=sqlalchemy.String,
),
),
)
zoot = sqlalchemy.Column(
sqlalchemy.ARRAY(
sqlalchemy_bigquery.STRUCT(
i=sqlalchemy.String,
j=sqlalchemy.String,
k=sqlalchemy.ARRAY(
sqlalchemy.String))))
bar = sqlalchemy.Column(
sqlalchemy.ARRAY(
sqlalchemy_bigquery.STRUCT(
a=sqlalchemy.String,
b=sqlalchemy.String,
c=sqlalchemy.ARRAY(
sqlalchemy_bigquery.STRUCT(
x=sqlalchemy.String,
y=sqlalchemy.String)))))
engine = sqlalchemy.create_engine(f'bigquery://{os.environ["BQ_PROJECT_ID"]}/{os.environ["BQ_DATASET_ID"]}')
Base.metadata.create_all(engine)
record = Foo2(
zap="123",
blah = ["hello", "hi"],
yarg = {
'a': 'value for a',
'b': 'value for b',
},
yip = [
{
'x': '1st value for x',
'y': '1st value for y',
},
{
'x': '2nd value for x',
'y': '2nd value for y',
},
],
zoot = [
{
'i': 'value for i',
'j': 'value for j',
'k': [
'value 1 for k',
'value 2 for k',
]
},
],
bar = [
{
'a': 'value for 1st bar.a',
'b': 'value for 1st bar.b',
'c': [
{
'x': 'value for 1st bar.c, 1st x',
'y': 'value for 1st bar.c, 1st y',
},
],
},
{
'a': 'value for 2nd bar.a',
'b': 'value for 2nd bar.b',
'c': [
{
'x': 'value for 2nd bar.c, 1st x',
'y': 'value for 2nd bar.c, 1st y',
},
{
'x': 'value for 2nd bar.c, 2nd x',
'y': 'value for 2nd bar.c, 2nd y',
},
],
},
],
)
with sqlalchemy.orm.Session(engine) as session:
session.add(record)
session.commit()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment