Re: [sqlalchemy] sqlalchemy get table with a string
Thank you for your response and I am immediately interested in your articles. 17 Mart 2021 Çarşamba tarihinde saat 20:46:11 UTC+3 itibarıyla Simon King şunları yazdı: > OK, I see. You're creating tables dynamically, and you want to be able > to insert data into those tables. > > I think it'll be easier to use SQLAlchemy Core for this, rather than > the ORM. You can use reflection to load table definitions from the > database. > > > https://docs.sqlalchemy.org/en/14/core/reflection.html#reflecting-database-objects > > https://docs.sqlalchemy.org/en/14/core/tutorial.html#coretutorial-insert-expressions > > That would look something like this (completely untested): > > # if there's a chance multiple people can call this > # at the same time, you'll need to add a lock around it > def get_table(table_name): > if table_name in meta.tables: > return meta.tables[table_name] > return Table(table_name, meta, autoload_with=db.session.connection()) > > table_name = request.form.get("varsayilanlar") > table = get_table(table_name) > insert = table.insert().values(**tablo) > db.session.execute(insert) > > Simon > > On Wed, Mar 17, 2021 at 4:19 PM FURKAN bilgin wrote: > > > > I updated sqlalchemy and now I get an error when accessing the database. > And their codes need to be coded: > > What I really wanted to do was add data to a table with json data in the > / main / write path. but now I get an error when I send / main / new-app > post request (I updated sqlalchemy and it happened) related codes are below > > Sorry for taking your time, there may not be a solution. I am thinking > of rewriting the codes. > > > > > > from sqlalchemy import MetaData, Table, Column, Integer, String, > create_engine, DateTime,VARCHAR > > from flask import Flask, abort, render_template, request,session,jsonify > > from flask_sqlalchemy import SQLAlchemy > > from datetime import datetime > > from sqlalchemy import text > > import json > > > > meta = MetaData() > > engine = create_engine('sqlite:Users/dell/Desktop/2.2/db.db') > > conn = engine.connect() > > > > app = Flask(__name__) > > > > app.config["SQLALCHEMY_DATABASE_URI"] = > 'sqlite:Users/dell/Desktop/2.2/db.db' > > db = SQLAlchemy(app) > > > > app.secret_key = "Lbgsa,pdsa_ıda)6Kyw%61" > > > > @app.route("/main/new-app",methods = ["GET","POST"]) > > def new_app(): > > if request.method == "GET": > > return render_template("gg.html") > > if application.query.filter_by(name = > request.form.get("username")).first(): > > return "UserName..." > > isim = request.form.get("username") > > varsayilanlar = request.form.get("varsayilanlar") > > d_varsayilanlar = json.loads(varsayilanlar).keys() > > lis = [Column('id', Integer, primary_key = True),Column('date', > DateTime, nullable=False, default=datetime.now)] > > for i in d_varsayilanlar: > > lis.append(Column(i,VARCHAR(80))) > > Table(isim, meta, *lis) > > meta.create_all(engine) > > new_app = application(name = isim, > > password = request.form.get("password"), > > anaSayfa = request.form.get("anaSayfa"), > > manuelSayfa = request.form.get("manuelSayfa"), > > dinamikSayfa = request.form.get("dinamikSayfa"), > > varsayilanlar= request.form.get("varsayilanlar"), > > dinamik = bool(request.form.get("dinamik")), > > kitap = bool(request.form.get("kitap")), > > kalem = bool(request.form.get("kalem"))) > > db.session.add(new_app) > > db.session.commit() > > return "200OK" > > > > @app.route("/main/write",methods = ["GET","POST"]) > > def write(): > > if request.method == "GET": > > return "POST!" > > app = application.query.filter_by(name = > request.form.get("username")).first() > > if not (app): > > return "Uygulama Bulunamadı" > > elif not(app.kalem) and (app.password != request.form.get("password")): > > return "TABLE NOT FOUND" > > tablo = json.loads(request.form.get("varsayilanlar")) > > #i want to get table here > > new_row = meta.tables[request.form.get("username")] > > employee = new_row(**tablo) > > db.session.add(employee) > > db.session.commit() > > return "200ok" > > class application(db.Model): > > id = db.Column(db.Integer,primary_key = True) > > name = db.Column(db.String(80)) > > password = db.Column(db.String(80)) > > anaSayfa = db.Column(db.String(80)) > > manuelSayfa = db.Column(db.String(80)) > > dinamik = db.Column(db.String(80)) > > dinamikSayfa = db.Column(db.String(80)) > > varsayilanlar= db.Column(db.String(80)) > > kitap = db.Column(db.String(80)) > > kalem = db.Column(db.String(80)) > > pub_date = db.Column(db.DateTime, nullable=False,default=datetime.now) > > 17 Mart 2021 Çarşamba tarihinde saat 17:17:56 UTC+3 itibarıyla Simon > King şunları yazdı: > >> > >> I assumed you were defining classes corresponding to your database > >> tables, as shown here: > >> > >> https://docs.sqlalchemy.org/en/14/orm/tutorial.html#declare-a-mapping > >> > >> If that's not how you're using SQLAlchemy, you'll have to show your > code. > >> > >> Simon > >> > >> On Wed, Mar 17, 2021 at 2:07 PM FURKAN bilgin >
Re: [sqlalchemy] sqlalchemy get table with a string
OK, I see. You're creating tables dynamically, and you want to be able to insert data into those tables. I think it'll be easier to use SQLAlchemy Core for this, rather than the ORM. You can use reflection to load table definitions from the database. https://docs.sqlalchemy.org/en/14/core/reflection.html#reflecting-database-objects https://docs.sqlalchemy.org/en/14/core/tutorial.html#coretutorial-insert-expressions That would look something like this (completely untested): # if there's a chance multiple people can call this # at the same time, you'll need to add a lock around it def get_table(table_name): if table_name in meta.tables: return meta.tables[table_name] return Table(table_name, meta, autoload_with=db.session.connection()) table_name = request.form.get("varsayilanlar") table = get_table(table_name) insert = table.insert().values(**tablo) db.session.execute(insert) Simon On Wed, Mar 17, 2021 at 4:19 PM FURKAN bilgin wrote: > > I updated sqlalchemy and now I get an error when accessing the database. And > their codes need to be coded: > What I really wanted to do was add data to a table with json data in the / > main / write path. but now I get an error when I send / main / new-app post > request (I updated sqlalchemy and it happened) related codes are below > Sorry for taking your time, there may not be a solution. I am thinking of > rewriting the codes. > > > from sqlalchemy import MetaData, Table, Column, Integer, String, > create_engine, DateTime,VARCHAR > from flask import Flask, abort, render_template, request,session,jsonify > from flask_sqlalchemy import SQLAlchemy > from datetime import datetime > from sqlalchemy import text > import json > > meta = MetaData() > engine = create_engine('sqlite:Users/dell/Desktop/2.2/db.db') > conn = engine.connect() > > app = Flask(__name__) > > app.config["SQLALCHEMY_DATABASE_URI"] = > 'sqlite:Users/dell/Desktop/2.2/db.db' > db = SQLAlchemy(app) > > app.secret_key = "Lbgsa,pdsa_ıda)6Kyw%61" > > @app.route("/main/new-app",methods = ["GET","POST"]) > def new_app(): > if request.method == "GET": > return render_template("gg.html") > if application.query.filter_by(name = > request.form.get("username")).first(): >return "UserName..." > isim = request.form.get("username") > varsayilanlar = request.form.get("varsayilanlar") > d_varsayilanlar = json.loads(varsayilanlar).keys() > lis = [Column('id', Integer, primary_key = True),Column('date', DateTime, > nullable=False, default=datetime.now)] > for i in d_varsayilanlar: > lis.append(Column(i,VARCHAR(80))) > Table(isim, meta, *lis) > meta.create_all(engine) > new_app = application(name = isim, > password = request.form.get("password"), > anaSayfa = request.form.get("anaSayfa"), > manuelSayfa = > request.form.get("manuelSayfa"), > dinamikSayfa = > request.form.get("dinamikSayfa"), > varsayilanlar= > request.form.get("varsayilanlar"), > dinamik = > bool(request.form.get("dinamik")), > kitap= > bool(request.form.get("kitap")), > kalem= > bool(request.form.get("kalem"))) > db.session.add(new_app) > db.session.commit() > return "200OK" > > @app.route("/main/write",methods = ["GET","POST"]) > def write(): > if request.method == "GET": > return "POST!" > app = application.query.filter_by(name = > request.form.get("username")).first() > if not (app): >return "Uygulama Bulunamadı" > elif not(app.kalem) and (app.password != request.form.get("password")): > return "TABLE NOT FOUND" > tablo = json.loads(request.form.get("varsayilanlar")) > #i want to get table here > new_row = meta.tables[request.form.get("username")] > employee = new_row(**tablo) > db.session.add(employee) > db.session.commit() > return "200ok" > class application(db.Model): > id = db.Column(db.Integer,primary_key = True) > name = db.Column(db.String(80)) > password = db.Column(db.String(80)) > anaSayfa = db.Column(db.String(80)) > manuelSayfa = db.Column(db.String(80)) > dinamik = db.Column(db.String(80)) > dinamikSayfa = db.Column(db.String(80)) > varsayilanlar= db.Column(db.String(80)) > kitap= db.Column(db.String(80)) > kalem= db.Column(db.String(80)) > pub_date = db.Column(db.DateTime, nullable=False,default=datetime.now) > 17 Mart 2021 Çarşamba tarihinde saat 17:17:56 UTC+3 itibarıyla Simon King > şunları yazdı: >> >> I assumed you were defining classes corresponding to your database >> tables, as shown here: >> >>
Re: [sqlalchemy] sqlalchemy get table with a string
I updated sqlalchemy and now I get an error when accessing the database. And their codes need to be coded: What I really wanted to do was add data to a table with json data in the / main / write path. but now I get an error when I send / main / new-app post request (I updated sqlalchemy and it happened) related codes are below Sorry for taking your time, there may not be a solution. I am thinking of rewriting the codes. from sqlalchemy import MetaData, Table, Column, Integer, String, create_engine, DateTime,VARCHAR from flask import Flask, abort, render_template, request,session,jsonify from flask_sqlalchemy import SQLAlchemy from datetime import datetime from sqlalchemy import text import json meta = MetaData() engine = create_engine('sqlite:Users/dell/Desktop/2.2/db.db') conn = engine.connect() app = Flask(__name__) app.config["SQLALCHEMY_DATABASE_URI"] = 'sqlite:Users/dell/Desktop/2.2/db.db' db = SQLAlchemy(app) app.secret_key = "Lbgsa,pdsa_ıda)6Kyw%61" @app.route("/main/new-app",methods = ["GET","POST"]) def new_app(): if request.method == "GET": return render_template("gg.html") if application.query.filter_by(name = request.form.get("username")).first(): return "UserName..." isim = request.form.get("username") varsayilanlar = request.form.get("varsayilanlar") d_varsayilanlar = json.loads(varsayilanlar).keys() lis = [Column('id', Integer, primary_key = True),Column('date', DateTime, nullable=False, default=datetime.now)] for i in d_varsayilanlar: lis.append(Column(i,VARCHAR(80))) Table(isim, meta, *lis) meta.create_all(engine) new_app = application(name = isim, password = request.form.get("password"), anaSayfa = request.form.get("anaSayfa"), manuelSayfa = request.form.get("manuelSayfa"), dinamikSayfa = request.form.get("dinamikSayfa"), varsayilanlar= request.form.get("varsayilanlar"), dinamik = bool(request.form.get("dinamik")), kitap= bool(request.form.get("kitap")), kalem= bool(request.form.get("kalem"))) db.session.add(new_app) db.session.commit() return "200OK" @app.route("/main/write",methods = ["GET","POST"]) def write(): if request.method == "GET": return "POST!" app = application.query.filter_by(name = request.form.get("username")).first() if not (app): return "Uygulama Bulunamadı" elif not(app.kalem) and (app.password != request.form.get("password")): return "TABLE NOT FOUND" tablo = json.loads(request.form.get("varsayilanlar")) #i want to get table here new_row = meta.tables[request.form.get("username")] employee = new_row(**tablo) db.session.add(employee) db.session.commit() return "200ok" class application(db.Model): id = db.Column(db.Integer,primary_key = True) name = db.Column(db.String(80)) password = db.Column(db.String(80)) anaSayfa = db.Column(db.String(80)) manuelSayfa = db.Column(db.String(80)) dinamik = db.Column(db.String(80)) dinamikSayfa = db.Column(db.String(80)) varsayilanlar= db.Column(db.String(80)) kitap= db.Column(db.String(80)) kalem= db.Column(db.String(80)) pub_date = db.Column(db.DateTime, nullable=False,default=datetime.now) 17 Mart 2021 Çarşamba tarihinde saat 17:17:56 UTC+3 itibarıyla Simon King şunları yazdı: > I assumed you were defining classes corresponding to your database > tables, as shown here: > > https://docs.sqlalchemy.org/en/14/orm/tutorial.html#declare-a-mapping > > If that's not how you're using SQLAlchemy, you'll have to show your code. > > Simon > > On Wed, Mar 17, 2021 at 2:07 PM FURKAN bilgin wrote: > > > > I think we keep it in RAM in the first method, so it may be a problem if > the program is restarted. and I guess I don't understand what you mean by > Base class. > > 17 Mart 2021 Çarşamba tarihinde saat 14:27:31 UTC+3 itibarıyla Simon > King şunları yazdı: > >> > >> There are lots of ways of doing this. One option is to provide a > >> dictionary when creating your declarative_base: > >> > >> classes = {} > >> Base = declarative_base(class_registry=classes) > >> > >> Now you can look up classes by name in that classes dictionary: > >> > >> def get_table_by_name(name): > >> return classes[name] > >> > >> Another option could be to iterate over Base.__subclasses__: > >> > >> def get_table_by_name(name): > >> for cls in Base.__subclasses__(): > >> if cls.__name__ == name: > >> return cls > >> > >> Hope that helps, > >> > >> Simon > >> > >> On Tue, Mar 16, 2021 at 7:14 PM FURKAN bilgin > wrote: > >> > > >> > table_name = "table_name" > >> > > >> > #get table as table > >> > > >> > new =
Re: [sqlalchemy] sqlalchemy get table with a string
I assumed you were defining classes corresponding to your database tables, as shown here: https://docs.sqlalchemy.org/en/14/orm/tutorial.html#declare-a-mapping If that's not how you're using SQLAlchemy, you'll have to show your code. Simon On Wed, Mar 17, 2021 at 2:07 PM FURKAN bilgin wrote: > > I think we keep it in RAM in the first method, so it may be a problem if the > program is restarted. and I guess I don't understand what you mean by Base > class. > 17 Mart 2021 Çarşamba tarihinde saat 14:27:31 UTC+3 itibarıyla Simon King > şunları yazdı: >> >> There are lots of ways of doing this. One option is to provide a >> dictionary when creating your declarative_base: >> >> classes = {} >> Base = declarative_base(class_registry=classes) >> >> Now you can look up classes by name in that classes dictionary: >> >> def get_table_by_name(name): >> return classes[name] >> >> Another option could be to iterate over Base.__subclasses__: >> >> def get_table_by_name(name): >> for cls in Base.__subclasses__(): >> if cls.__name__ == name: >> return cls >> >> Hope that helps, >> >> Simon >> >> On Tue, Mar 16, 2021 at 7:14 PM FURKAN bilgin wrote: >> > >> > table_name = "table_name" >> > >> > #get table as table >> > >> > new = table(**tablo) >> > db.session.add(table) >> > db.session.commit() >> > >> > -- >> > 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+...@googlegroups.com. >> > To view this discussion on the web visit >> > https://groups.google.com/d/msgid/sqlalchemy/c3c7c369-7d7f-41b0-b6f3-273b6c76314dn%40googlegroups.com. > > -- > 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/1f98d725-f15f-4fde-9fe2-4205f71eb1d8n%40googlegroups.com. -- 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/CAFHwexeUNOP-dUkpxem2dpkJNPs5XQTpmx9rgbbJ6-M45%2BvLRQ%40mail.gmail.com.
Re: [sqlalchemy] sqlalchemy get table with a string
I think we keep it in RAM in the first method, so it may be a problem if the program is restarted. and I guess I don't understand what you mean by Base class. 17 Mart 2021 Çarşamba tarihinde saat 14:27:31 UTC+3 itibarıyla Simon King şunları yazdı: > There are lots of ways of doing this. One option is to provide a > dictionary when creating your declarative_base: > > classes = {} > Base = declarative_base(class_registry=classes) > > Now you can look up classes by name in that classes dictionary: > > def get_table_by_name(name): > return classes[name] > > Another option could be to iterate over Base.__subclasses__: > > def get_table_by_name(name): > for cls in Base.__subclasses__(): > if cls.__name__ == name: > return cls > > Hope that helps, > > Simon > > On Tue, Mar 16, 2021 at 7:14 PM FURKAN bilgin wrote: > > > > table_name = "table_name" > > > > #get table as table > > > > new = table(**tablo) > > db.session.add(table) > > db.session.commit() > > > > -- > > 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+...@googlegroups.com. > > To view this discussion on the web visit > https://groups.google.com/d/msgid/sqlalchemy/c3c7c369-7d7f-41b0-b6f3-273b6c76314dn%40googlegroups.com > . > -- 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/1f98d725-f15f-4fde-9fe2-4205f71eb1d8n%40googlegroups.com.
Re: [sqlalchemy] sqlalchemy get table with a string
There are lots of ways of doing this. One option is to provide a dictionary when creating your declarative_base: classes = {} Base = declarative_base(class_registry=classes) Now you can look up classes by name in that classes dictionary: def get_table_by_name(name): return classes[name] Another option could be to iterate over Base.__subclasses__: def get_table_by_name(name): for cls in Base.__subclasses__(): if cls.__name__ == name: return cls Hope that helps, Simon On Tue, Mar 16, 2021 at 7:14 PM FURKAN bilgin wrote: > > table_name = "table_name" > > #get table as table > > new = table(**tablo) > db.session.add(table) > db.session.commit() > > -- > 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/c3c7c369-7d7f-41b0-b6f3-273b6c76314dn%40googlegroups.com. -- 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/CAFHwexfPY_VqEeD0Rurc_HDyw%2BnRFsOSGq_Oeo66ZgjBSnEkpg%40mail.gmail.com.
[sqlalchemy] sqlalchemy get table with a string
*table_name = "table_name"* *#get table as table* *new = table(**tablo)db.session.add(table)db.session.commit()* -- 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/c3c7c369-7d7f-41b0-b6f3-273b6c76314dn%40googlegroups.com.